Expdp指定导出带有匹配符的对象
在SQL中,字符'_'和'%'是有特定含意的:‘_’匹配任何一个字符,'%'则匹配任何数量的字符,包括0个字符。如果要在SQL中,要让这两个字符表示字符本身,则要做相应的处理,加有escape关键字,如:SQL> select table_name from user_tables where table_name like 'A_%' escape '';TABLE_NAME------------------------------A_A_1A_2在expdp时,如果也期望导出如上的表,即导出经字符A_开头的表,在expdp里的include里是不能识别escape,这样的话,就会导出多余的表出来的:执行命令:expdp directory=expdp_dir dumpfile=test.dump INCLUD
EXP-00090: cannot pin type "SCHEMA"."TYPE_NAME"
EXP-00056: ORACLE error 22303 encounteredEXP-00090: cannot pin type "UserName"."KU$_CLUSTER_T"环境: OS Solaris 10, DB 10.2.0.4数据库升级之后(从10.2.0.3到10.2.0.4),这个升级也不知是谁做的,不知期间是怎么做升级。也太不负责了,一升级就整出了这么多无效的对象,也不查一下原因.目前的问题是:exp导数据,日志里出现大量exp-90错误, 登陆数据库查了一下,发现无效的对象比较多,都是KU$_开头的,这些KU$_都是type类型。不知道这些type是干什么的,从查到的资料来看,XDB数据库会到,对XDB不太了解。查看
Datapump的几个参数
Datapump有些参数并没有公开,但是在实际情况下,这些参数还是比较有用处的,在此总结几个参数.[@more@]1.metrics=y 这个是隐藏参数。功能是显示导出来多少个对象,这些对象花了多少时间,这些对象主要指的是定义(导入时,建index花了多少时间,有参考价值),不显示导表数据时间。如果能够把导每张表花了多少时间显示出来,还是很有参考价值的.可能以后的版本会做到这点,这也可能为什么这个是隐藏参数的原因.下面是加了此参数,显示的信息:Processing object type SCHEMA_EXPORT/USER Completed 1 USER objects in 0 secondsProcess
设置OS用户跑schedule job执行外部程序
一直不清楚Oracle Schedule是通过哪个OS用户去执行外面的程序,metalink 391820.1提到了,在这里做个记录。以备后查。相应程序执行的用户定义在externaljob.ora里,默认情况下是nobody用户,其OS权限是相当低的。可以修改这个文件,指定相应的用户跑外部程序。同时要把这个文件的属主改成root,设置权限为640. 还有$ORACLE_HOME/extjob权限设置为4750.$ tail -2 $ORACLE_HOME/rdbms/admin/externaljob.orarun_user = nobodyrun_group = nobody[@more@]
ORA-28031: maximum of 148 enabled roles exceeded
在alert_<SID>.log里报如下错误:ORA-12012: error on auto execute of job 2ORA-28031: maximum of 148 enabled roles exceeded[@more@]今天一同事提到ORA-28031错误,错误信息明显的提示了授予用户role的数量超过148个导致的。这些role的数量,包括直接授予的,也包括间接授予的。当一个用户被直接和间接授予的role超过148个时,导致的直接问题是用户不能登录数据库,布置的后台job也不能执行。有一个例外就是sys可以拥有超过148个role,它可以正常的登录数据库,但后台sys的JOB不能正常的跑。同时要注意,创建role的用户,隐含的被
DBMS_DDL加密脚本.
在10G版本, 有一个新的package DBMS_DDL,它提供脚本加密的功能。同时10G也增强了字符窜的处理方式,通常情况在字符窜里有单引号的话,要用两个单引号才能在字符窜里显示一个单引号,10G有了新的方法处理这一情形了。下面的示例结合dbms_ddl显示这个功能,感觉跟perl里的q//一样(perl里也可以q[])下面是测试示例:[@more@]SQL>declare 2 fun varchar2(200); 3 begin 4 fun:=q'[create or replace function f_test1 return date 5 is 6 begin 7 return sysdate-1; 8 end; 9 ]'; 10 dbms_ddl.create_wrapped(fun); 11
通过写规则,控制streams复制.
下面的代码是通来写代码实现RULE,然后应用到streams,这个例子比较简单,做复杂的业务转换,可通过类似示例中的function rename_schema_01来实现.Declarative Rule-Based transformation Streams能实现的功能,自己写规则都可以实现,更复杂的功能,可以通来PL/SQL来实现,然后包装成规则.[@more@]SQL> alter database add supplemental log data;Database altered.SQL> select log_mode SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_DAT A_ALL from v$data
Declarative Rule-Based transformation Streams
As I mentioned last time, there are 2 type of Rule transformations, one is declarative rule-based transformation (rules provided by Oracle itself), and the other is Custom rule-base transformation ( rules coded by Oracle users, write PL/SQL to realize the rule).[@more@]As I mentioned last time, there are 2 type of Rule transformations, one is declarative rule-based transformation (rules provided by Oracle itself), and the other is Custom rule-base transformation ( rules coded by Oracle users, wr
Error: cannot fetch last explain plan from plan_table
环境:OS: Solaris 10DB: 10.2.0.3今天碰到这样的怪事,用dbms_xplan.display显示一条SQL执行计划时,报错"Error: cannot fetch last explain plan from plan_table". 一开始就觉得Plan_table的版本是不是过时了,也没仔细看,就重新生成plan_table,再跑刚条SQL,还是报一样的错误,这样看来,就不是Plan_table版本的问题了,那会不会是SQL本身的问题呢?换一条SQL:select sysdate from dual,通过dbms_xplan.display正确显示结果,再跑一下有问题的那SQL,错误依旧。从上面的现象来判断,那应是SQL本身的问题。分析一下出问题的
执行计划导致错误的结果
执行计划导致不正确的结果.[@more@]环境:Oracle: 10.2.0.4OS: Redhat Linux 2.6.9-42.ELsmp构建测试环境:CREATE TABLE AA( A NUMBER(11,0),B VARCHAR2(12),C NUMBER(11,0)) ;CREATE TABLE AB( D VARCHAR2(4) NOT NULL ENABLE,ID NUMBER(11,0),DATE1 DATE NOT NULL ENABLE,B VARCHAR2(12) NOT NULL ENABLE,C NUMBER(11,0) NOT NULL ENABLE);CREATE TABLE AC( ID NUMBER(11,0) NOT NULL ENABLE,E VARCHAR2(50)) ;CREATE TABLE AD( F NUMBER(2,0) NOT NULL ENABLE,E VARCHAR2(20) NOT NULL ENABLE) ;insert into AA values(2155,'0000000000
Slow expdp with parallel when exporting LONG RAW data type
A case I suffered recently.Normally, expdp is more efficient than triditional exp, so many users tend to use expdp. yet, there are some limitions on this tool, or performance issue. since it is a new tool, it can be perfect. below is the case, I met recently.[@more@]Environment:OS: AIX 5.3.0.0, Num of Physical CPU: 8, Physical Mem 20GBDB: 10.2.0.3This case happened last Saturday during the process to deploy an application release. As the plan scheduled there was a step to export the whole databa
LOGMNR遭遇Ora-600
LOGMNR遭遇Ora-600OS: AIX 5.3.0.0DB: 10.2.0.3数据被误删除之后,最容易想到的解决方案是logmnr, 但logmnr也时也会出问题(在非常时期,真是什么都有可能)。按照logmnr的操作流程:SQL> dbms_logmnr.add_logfile(‘归档文件全路径’, dbms_logmnr.new);SQL> dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);SQL> create table temp_logmnr as select * from v$logmnr_contents; create table temp_logmnr tablespace data_01 as select * from v$logmnr_contents
转一篇AIX内存配置的文档
AIX内存分为计算页面和非计算页面。Oracle跑在AIX上所分配的内存SGA属于计算页面,出于对oracle性能的考虑,应尽量减少计算页面的换出,曾经碰到在AIX默认的参数配置中,当oracle做备份时,大量的SGA被换出,导致前端报性能问题。这里转一篇metalink 316533.1SymptomsDatabase performance continues to get slower and slower the longer the database is left running. You may also notice a continuing increase in the amount of paging space usage the longer the database is left running. However, database performance return
Temporary LOB导致临时表空间暴满.
环境:OS:linuxDB:10.2.0.4引子:最近的数据库时不时的报临时表空间的满的警告,后来跟踪代码,发现是做CLOB操作时,导致的。测试代码:先建一个临时表空间,文件大小为100M, 开三个session, 依次在每个session里跑下面的代码:declareclb clob;ch varchar2(32767);k number;begindbms_lob.createtemporary(clb,true,dbms_lob.call);for i in 1..1500 loopch:=lpad('o',32767,'Y');dbms_lob.writeappend(clb,length(ch),ch);end loop;k:=dbms_lob.getlength(clb);dbms_lob.freetemporary(clb);dbms_output.put_line('the clob length: