一个数据仓库数据刷新的实现机制(六)
表 eden_refr_objt该表存放所要刷新的数据库对象名称,类型,刷新方式等信息。[@more@]如果今后要刷新的数据库对象有变动,由用户增删改该表中的纪录实现。该表中的纪录由shell脚本 refresh_schema 自动读取表eden_refr_objt创建脚本:create table EDEN_REFR_OBJT( USER_NAM VARCHAR2(30) not null, OBJ_NAM VARCHAR2(50) not null, OBJ_TYPE VARCHAR2(10) not null, REFR_TYPE CHAR(1) not null, PROC_NAM VARCHAR2(50), OBJ_SEQ NUMBER)/alter table E
一个数据仓库数据刷新的实现机制(五)
shell refresh_table用于调用一个sql文件刷新一张表,并纪录刷新信息[@more@]用法:refresh_table SQL_FILE_NAME SCHEMA PASSWORD$refresh_table eden_flat_ord_cmpt_fr.sql edenfr ******该脚本中注意以下语句:TABLE_NAME=`echo ${1%_*}|cut -d"/" -f 4`其中${1%_*}是bash里面的模式匹配。shell refresh_table位于目录/erdb/bin下,而sql文件位于/erdb/sql目录下,sql文件名的命名规则为TABLENAME_COUNTRY.sql, 其中COUNTRY为缩写,FR代表法国,UK代表英国等。通过修改函数rfsh_env()中的参数,可以方便连到不同的数据库(比
一个数据仓库数据刷新的实现机制(四)
PROCEDURE REFRESH_TAB用于刷新由存储过程刷新的表数据,并纪录刷新信息[@more@]比较类似上一个过程refresh_mv,所不同的是在这里刷新数据所调用的存储过程作为传入参数 PROCEDURE REFRESH_TAB(P_USER_NAME IN VARCHAR2, P_TAB_NAME IN VARCHAR2, &n
一个数据仓库数据刷新的实现机制(三)
Procedure EDEN_REFRESH.REFRESH_MV用于刷新MV并纪录刷新信息[@more@]这是一个包(package)的一部分,附上包头:CREATE OR REPLACE PACKAGE EDEN_REFRESH IS PROCEDURE REFRESH_MV(P_USER_NAME IN VARCHAR2, P_MV_NAME IN VARCHAR2, P_LOG_DIR IN VARCHAR2); PROCEDURE REFRESH_TAB(P_USER_NAME IN VARCHAR2, &
一个数据仓库数据刷新的实现机制(二)
表eden_refr_log,记录数据刷新信息[@more@]SQL> desc eden_refr_logName Type Nullable Default Comments ------------- -------------- -------- ------- -------- USER_NAM VARCHAR2(30) OBJ_NAM&
一个数据仓库数据刷新的实现机制(一)
基本介绍 [@more@]一个数据仓库,需要刷新的数据库对象有表(Table)和物化视图(Materialized View)。其中一部分表通过运行位于/erdb/sql/的*.sql脚本文件刷新数据,一部分表通过存储过程刷新数据。物化视图(MV)没有在主表上建物化视图日志(Materiralized View Log),只能执行完全刷新,但是在刷新失败时要求能自动回滚到刷新前的状态。需要刷新的数据库对象分别属于12个schema,分别对应于6个国家。比如EDENFR和EWRFRMASTER对应法国,EDENUK和EWRUKMASTER对应英国等。需要纪录各表和MV刷新前后的数据量,刷新前后的时间点,刷新所用时间,刷
关于 TX 锁的两句sql
TX(Transaction) Lock是开发中涉及最多的锁类型。下面两句sql对于获取TX锁的相关信息相当有用。[@more@] SQL> update dept set dname='RTS' where deptno=40; 1 row updated SQL> update dept set dname='ccc' where deptno=40; SQL> select username, 2 v$lock.sid, 3 trunc(id1 / power(2, 16)) rbs, 4 bitand(id1, to_number('fff
一个利用游标返回数据集的例子
昨日给人做存储过程的tuning,加了个索引很简单地搞定了,返回结果从10秒钟降到2秒钟。但是那个存储过程的写法和用途却是第一次见到,贴过来,下次做参考,呵呵[@more@]存储过程:PROCEDURE RCA_GET_ENG_ALL_PARAM_PRC(pi_model_id RDO.RDO_MODEL_MASTER.MODEL_ID%TYPE,pi_engine_id RDO_ENGINE.ENGINE_ID%TYPE,ResultSet OUT RDO_APP_PKG.result_cursor) ASPSQLSTMT VARCHAR2(8000);SQLSTR VARCHAR2(2000);BEGIN execute immediate 'alter session set sort_area_size=80000000'; SQLSTR
显示 Oracle UNIX 进程的 CPU 和 RAM
opserdb>ps -eo pid,user,vsz,pcpu,nice|grep ora|sort +3|tail[@more@]结果如下 PID USER VSZ %CPU NI29132 oracle 1184 0.0 2229238 oracle 1312 0.0 2229291 oracle 1184 0.0 2229324 oracle 1184 0.0 2229367 oracle 1312 0.0 2229465 oracle 1184 0.0 2229640 oracle 1184 0.0 2229682 oracle 1312 0.0 2229839 oracle 1312&
Oracle Discoverer中一些有用的SQL
正确使用Oracle Discoverer的数据字典有时候能极大提高工作效率,可是找不到关于Discoverer数据字典的资料,有资料估计也很难自己把它掌握。那就有多少是多少吧,工作中用到过的SQL贴到这里,今后用到时好找。 [@more@] BA_NAMEOBJ_NAMEOBJ_DESCRIPTIONADMINADM_BA_DOC ADMINADM_FOLD_DOC ADMINADM_JOIN_DETAIL_DOC ADMINADM_REFRESH_LOG_STATUSADM_REFRESH_LOGADMINADM_JOIN_DOC 12' ' SEQIDNAME1100057ADM_BA_DOC2100057 BA_NAME2100057 &nb
巧用Oracle Discoverer中的数据字典检查join
Oracle Discoverer中的EUL(End User Layer)其实是一些数据字典,存储Discoverer Objects信息。合理利用这些数据字典能极大提高工作效率。[@more@]问题:EDENFR用户已经配置好所有的Discoverer Objects(包括Business Area, Folder, Join等),以此为基础,将所有Discoverer Objects复制到EDENUK用户下,一般采用exp/imp Business Area然后修改属性的方法。在给EDENUK修改属性和配置过程中,经常由于各种原因会出现各种改动。现在客户要求以EDENFR的joins为标准,检查EDENUK中所有joins,并列出EDENUK中所有不一致的joins。类似的检查也要在E
定制sql*plus的几条命令
sql*plus每次启动前会执行$ORACLE_HOME/sqlplus/admin/login.sql (glogin.sql)文件,修改该文件内容可以在每次进入sql*plus是进入自己定制的模式中。[@more@]一个glogin.sql文件例子:set serveroutput on size 100000set trimspool onset long 5000set linesize 100set pagesize 9999column plan_plus_exp format a80column global_name new_value gnameset termout offselect lower(user)||'@'||decode(global_name,'ORCL.US.ORACLE.COM','ORCL',global_name) global_name from global_name;set sqlprompt '&gname>'set termout
物化视图(Materialized View)的刷新回滚约束
算上一篇(http://blog.itpub.net/post/334/15305)的续篇对于物化视图(Materialized View)的完全刷新,如果将物化视图加入到表中,则刷新时能用delete替代truncate。这样在刷新失败时能够回滚。但是采用物化视图组(Materialized View Group)刷新时,要考虑一些约束。[@more@]1. 对undo表空间的需求。delete替代truncate,必然产生大量undo信息,所以要考虑使undo tablespace足够大2. 如果一个物化视图组(Materialized View Group)只包括一个物化视图(Materialized View),则仍然采用truncate方式刷新,失败时无法回滚。 (这部分测试过
物化视图(Materialized View)的刷新回滚测试
物化视图在完全刷新(complete refresh)过程中,由于各种原因而刷新失败时,会导致该物化视图中的记录数为0。这是由于对单个物化视图的完全刷新,Oracle采用truncate/insert方法。要避免这种情况,使物化视图能在刷新失败时保持在刷新前的状态,可以采用刷新物化视图组(Materialized View Group)的方式。这是因为Oracle对物化视图组的刷新采用delete/insert方法。[@more@]==创建2个MVSQL> create materialized view dept_mv 2 build immediate 3 &
Oracle discoverer中exp/imp Business Areas (BAs) 和folders
Oracle Discoverer中,如果需要将A客户的business area复制到B客户下,可以采用exp/imp方法[@more@]具体步骤如下:1. Export the business area: this will save the objects definitions in a file2. Import the file3. 修改BA/Folder的name, identifier等属性,修改join属性和修改必要的sql定义对于单个BA,以上做法可行且无误。但是对于多个BAs,则有可能导致隐藏比较深的问题。由于join可以跨BA,也即某个BA下的folder中的join可能会调用其他BA下某个folder中的列。这样如果两个BA不同时exp,则两个BA的定义分别存于不同的文件中,imp
materialized view (物化视图)
一些materialized view的实现脚本,先放上来,下次测试时可以省去查看各文档的步骤[@more@]Available mechanisms:1. Set the refresh mode as “ON COMMIT”, and set the refresh method as “FORCE”SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT;Grant succeeded.SQL> GRANT ON COMMIT REFRESH TO SCOTT;Grant succeeded.SQL> GRANT QUERY REWRITE TO SCOTT;Grant succeeded.SQL> CONNECT SCOTT/TIGERConnected.--create MV with ‘ON COMMIT’ optionSQL> CREATE MATERIALIZED V
如果碰上一个很暴躁的客户
无可否认,跟人打交道是我的弱项。观察我周围的技术人员,多少也有点这样,善于跟客户打交道的,似乎更多来自本身的性格和以前的经验。今天的客户交流培训,多少让我学到了一点通用的方法。[@more@]如果碰上一个脾气暴躁的客户,或者客户碰到了大麻烦,怀着发泄的心情给你打电话,应该做如何反映呢?不要做解释,他们听不进去任何解释。不要给出解决问题的时间表,这可能会使后面的事情更糟。你要做的是首先承认错误,让客户觉得自己是对的。对给客户造成的不便道歉,让他觉得自己是付了钱的。让对方知道自己正利用所有资源全力解决。、这
Oracle Discoverer
新项目要用到的工具。折腾了几天,基本上会了。比较容易掌握。[@more@]分两部分产品,Discoverer Administrator 和 Discoverer Desktop。Discoverer Administrator相当于一个简化版的数据仓库工具。需要预先建立一些基础表,用于存储meta data。然后建立一些business areas,包括所要抽取的字段,定义层次等。Discover Desktop就是一个做报表的工具,很简单。从administrator定义的对象里提取所需信息,就可以做成报表。类似excel,但是报表方面功能比excel 强大,可以转换报表的维(dimension),将报表分页等。Discoverer比起以前开发数据
show_space
show_space存储过程,显示block级别存储信息挺管用的,保存起来[@more@]create or replace procedure show_space( p_segname_1 in varchar2,p_space in varchar2 default 'MANUAL',p_type_1 in varchar2 default 'TABLE' ,p_analyzed in varchar2 default 'N',p_owner_1 in varchar2 default user)asp_segname varchar2(100);p_type varchar2(10);p_owner varchar2(30);l_unformatted_blocks number;l_unformatted_bytes number;l_fs1_blocks number;l_fs1_bytes number;l_fs2_blocks number;l_fs2_bytes number;l_fs3_blocks number;l_fs
Oracle stored procedure to send email
这是以前从网上看来的存储过程(很抱歉没记住原作者)。在moto做项目时自己修改后测试了一下,真的好用,呵呵。可惜自己修改后的版本没有保留下来。 [@more@]create or replace procedure ProcSendEmail(txt varchar2) IS &n