12
返回列表 发新帖

求问个物化视图刷新的问题

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2017-5-18 09:19 | 只看该作者
newkid 发表于 2017-5-18 08:57
把你操作的语句全部贴出来。MV 一般不能 truncate, 怀疑你写错了。

vPrc_Resulst:= 0;
    S_Pkg_PixPatInfo.Prc_LogPrcIni (vPrc_Resulst, vTaskId, vPrc_Name, 'CenDoc信息更新处理PIX任务创建成功');

    --02 CENDOC库人员基本信息同步开始
    vPrc_Resulst:= 0;
    --dbms_output.put_line('CENDOC库人员基本信息同步-{S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH}开始');
    S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH      (vPrc_Resulst, vTaskId);
    Resulst := Case When vPrc_Resulst > 0 Then Resulst Else vPrc_Resulst End;
    --dbms_output.put_line('CENDOC库人员基本信息同步-{S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH}结束');

Procedure Prc_Pix_GxGrDAH     (Resulst Out Integer, vTaskId In Varchar2) Is
    vPrc_Name   Varchar2(100);
    script      Varchar2(8000);
    sql_log     Varchar2(8000);
    vTable      Varchar2(200);
    vRow_Ins    Integer;
    vRow_Upd    Integer;
  Begin
    vPrc_Name:='Prc_Pix_GxGrDAH';
    Resulst := 0;
    vTable:='TB_CENTER_INFO';
    --04 个人档案相关物化视图更新
    Script:='Truncate Table DAH_INDEX';
    --dbms_output.put_line(script);
    Execute Immediate Script;
    dbms_mview.Refresh('DAH_INDEX','Complete');
就是这里,能看到上一步的日志,然后这个刷新的物化视图里查不到数据,应该是卡在刷新这里,我的包里还有其他三个物化视图这么刷新的,前两个都可以刷的,之前也刷新过,

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2017-5-18 09:22 | 只看该作者
newkid 发表于 2017-5-18 08:57
把你操作的语句全部贴出来。MV 一般不能 truncate, 怀疑你写错了。

vPrc_Resulst:= 0;
    S_Pkg_PixPatInfo.Prc_LogPrcIni (vPrc_Resulst, vTaskId, vPrc_Name, 'CenDoc信息更新处理PIX任务创建成功');

    --02 CENDOC库人员基本信息同步开始
    vPrc_Resulst:= 0;
    --dbms_output.put_line('CENDOC库人员基本信息同步-{S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH}开始');
    S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH      (vPrc_Resulst, vTaskId);
    Resulst := Case When vPrc_Resulst > 0 Then Resulst Else vPrc_Resulst End;
    --dbms_output.put_line('CENDOC库人员基本信息同步-{S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH}结束');

Procedure Prc_Pix_GxGrDAH     (Resulst Out Integer, vTaskId In Varchar2) Is
    vPrc_Name   Varchar2(100);
    script      Varchar2(8000);
    sql_log     Varchar2(8000);
    vTable      Varchar2(200);
    vRow_Ins    Integer;
    vRow_Upd    Integer;
  Begin
    vPrc_Name:='Prc_Pix_GxGrDAH';
    Resulst := 0;
    vTable:='TB_CENTER_INFO';
    --04 个人档案相关物化视图更新
    Script:='Truncate Table DAH_INDEX';
    --dbms_output.put_line(script);
    Execute Immediate Script;
    dbms_mview.Refresh('DAH_INDEX','Complete');
就是这里,能看到上一步的日志,然后这个刷新的物化视图里查不到数据,应该是卡在刷新这里,我的包里还有其他三个物化视图这么刷新的,前两个都可以刷的,之前也刷新过,

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2017-5-18 09:27 | 只看该作者
newkid 发表于 2017-5-18 08:57
把你操作的语句全部贴出来。MV 一般不能 truncate, 怀疑你写错了。
  1. vPrc_Resulst:= 0;
  2.     S_Pkg_PixPatInfo.Prc_LogPrcIni (vPrc_Resulst, vTaskId, vPrc_Name, 'CenDoc信息更新处理PIX任务创建成功');
  3.     --02 CENDOC库人员基本信息同步开始
  4.     vPrc_Resulst:= 0;
  5.     --dbms_output.put_line('CENDOC库人员基本信息同步-{S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH}开始');
  6.     S_Pkg_PixPatInfo.Prc_Pix_GxGrDAH      (vPrc_Resulst, vTaskId);


  7. Procedure Prc_Pix_GxGrDAH     (Resulst Out Integer, vTaskId In Varchar2) Is
  8.     vPrc_Name   Varchar2(100);
  9.     script      Varchar2(8000);
  10.     sql_log     Varchar2(8000);
  11.     vTable      Varchar2(200);
  12.     vRow_Ins    Integer;
  13.     vRow_Upd    Integer;
  14.   Begin
  15.     vPrc_Name:='Prc_Pix_GxGrDAH';
  16.     Resulst := 0;
  17.     vTable:='TB_CENTER_INFO';
  18.     --04 个人档案相关物化视图更新
  19.     Script:='Truncate Table DAH_INDEX';
  20.     --dbms_output.put_line(script);
  21.     Execute Immediate Script;
  22.     dbms_mview.Refresh('DAH_INDEX','Complete');
复制代码

这是两个存储过程里的代码,我写在一起了,我之前就是这么刷新的,可以刷的,这回就一直运行没结果

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2017-5-18 10:42 | 只看该作者
newkid 发表于 2017-5-18 08:57
把你操作的语句全部贴出来。MV 一般不能 truncate, 怀疑你写错了。

我查了下当前正在执行的sql语句,发现正在执行insert这个物化视图的sql。。看来是要继续等下去,,不过速度也太慢了点了,而且查了下占用的IO,高的离谱

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
发表于 2017-5-18 22:16 | 只看该作者
咖啡好不好喝 发表于 2017-5-18 10:42
我查了下当前正在执行的sql语句,发现正在执行insert这个物化视图的sql。。看来是要继续等下去,,不过速 ...

是不是有很多索引?维护索引是费时间的。
如果你重新创建一个会不会更快?就是我说的CREATE TABLE AS SELECT的办法。

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2017-5-19 10:41 | 只看该作者
newkid 发表于 2017-5-18 22:16
是不是有很多索引?维护索引是费时间的。
如果你重新创建一个会不会更快?就是我说的CREATE TABLE AS SE ...

索引不是很多,,估计是资源占用吧,,,我之后又重新刷新了一遍,没改任何东西,就一个小时就刷新完了,,,物化视图刷新我总感觉很有脾气,,,上回也是,刷了好几次不成功,后来半夜刷了几十分钟就好了

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
17#
发表于 2017-5-19 23:19 | 只看该作者
咖啡好不好喝 发表于 2017-5-19 10:41
索引不是很多,,估计是资源占用吧,,,我之后又重新刷新了一遍,没改任何东西,就一个小时就刷新完了, ...

如果资源足够,自己用TRUNCATE+INSERT+APPEND+并行操作。

使用道具 举报

回复
论坛徽章:
73
2010新春纪念徽章
日期:2010-03-01 11:06:132011新春纪念徽章
日期:2011-02-18 11:43:332012新春纪念徽章
日期:2012-01-04 11:55:422013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:44:08马上有车
日期:2015-01-19 09:45:33最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-11-27 10:16:10问答徽章
日期:2013-10-23 15:13:22林肯
日期:2013-11-02 08:34:46
18#
发表于 2017-10-10 23:47 | 只看该作者
newkid 发表于 2017-5-18 02:03
你是自己把旧数据TRUNCATE了?那你岂不是要先DROP MATERIALIZED VIEW,变成表再操作?
我说的CREATE NEW_ ...

你这个方法很有意思啊。
就是
CREATE OR REPLACE VIEW MV_XXX AS SELECT * FROM MY_TABLE_1;
CREATE OR REPLACE VIEW MV_XXX AS SELECT * FROM MY_TABLE_2;

来回换?MY_TABLE_1,MY_TABLE_2就是原先那个很难刷新的物化视图创建的实体表?

可以在创建MY_TABLE_2好之后,就紧接着:
CREATE OR REPLACE VIEW MV_XXX AS SELECT * FROM MY_TABLE_2;

现在有个问题是,如果VIEW MV_XXX,的select访问比较密集,
CREATE OR REPLACE VIEW MV_XXX AS SELECT * FROM MY_TABLE_2;
这句sql还能很快的完成吗?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
19#
发表于 2017-10-11 00:10 | 只看该作者
XQKA 发表于 2017-10-10 23:47
你这个方法很有意思啊。
就是
CREATE OR REPLACE VIEW MV_XXX AS SELECT * FROM MY_TABLE_1;

如果正被别人访问,这个DDL就会挂住。所以这种切换是需要停机时间的,哪怕是很短暂,不适用于24X7的系统。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表