expdp的一些限制(ZT)
1,语法expdp help=yimpdp help=ygrant create any directory to xxx ;grant read ,write on directory dump_pgbb to xxx;grant exp_full_database to xxx ;grant imp_full_database to xxx ;2,参数parallel不应该超过CPU数的2倍。在10.2.0.3 会报ORA-39014 系列错误,解决方案,去掉parallel参数。network_link一般expdp的文件都在本地,但是通过network_link参数可以实现把dump文件放在远端的主机上,或者甚至直接利用impdp而不形成文件,但是这个参数要求表内不能有LONG类型字段,而LOB字段则可以。estimate_only使用ESTIMATE_ONLY 的时
expdp的用法
oracle 10G之后出现了expdp,效率要比原来的exp高出很多。expdp后面的参数和exp有很多区别,现特别写出几个常用的,并和exp命令的参数对照一下。expdp parfile=aaa.par userid=user/pass schemas=userexp parfile=aaa.par userid=user/pass owner=userpar文件中的区别先是expdpparallel=16 --这里可以设置并行,exp只可以设置单表的并行filesize=20000000000 --这里是20G一个文件,和exp一样dumpfile=(mdcp_data00.dmp,mdcp_data01.dmp) --必须是dumpfile,exp是filelogfile=mdcp_data.log --这里参数是logfile,exp是log。这里不能直接
系统临时表空间不足问题
今天碰到个问题,系统的临时表空间不断报错,说无法扩展。ORA-1652: unable to extend temp segment by 128 in tablespace DMPTEMP我们这个系统的临时表空间应该足够,但不知道为什么会总是报无法扩展,于是查了查资料。查看当前占用临时表空间的语句:SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_textFROM v$session a, v$tempseg_usage b, v$sqlarea cWHERE a.saddr = b.session_addrAND c.address= a.sql_addressAND c.hash_value = a.sql_hash_valueORDER BY b.tablespace, b.blocks;下面就是AWR中
今天碰到的一个oracle用户锁定问题
今天碰到这么个问题,我修改了oracle中一个用户的密码,但过了一段时间之后(大约10分钟),就会发现这个用户被锁定了(account lock),我解锁之后能够好一阵,但是又过了大约10分钟之后,该用户又被锁定了。首先,我能够确定,我的程序中肯定没有对用户锁定的语句。然后我就查找原因,起初是以为修改密码的语句写错了,我写的是alter user user_name identified by user_pass;以为写成alter user user_name identified by user_pass account unlock;就会好了,但是过了一段时间还是被锁定,所以排除这个原因。后来发现,应该是有个weblo
数据库冷备份需要备份的文件
数据文件控制文件重做日志undo 表空间(如果数据库关闭的时候使用的是shutdown immediate,那么就不用备份该文件了)sys表空间spfile[@more@]
ORA-01536: 超出表空间 'INXTSP11' 的空间限额
今天碰到一个错误:ORA-01536: 超出表空间 'INXTSP11' 的空间限额开始没看清,以为是表空间不够呢,就增加了一个表空间文件。第二次发现还不对,于是查了查文档[oracle@localhost oracle]$ oerr ora 153601536, 00000, "space quota exceeded for tablespace '%s'"// *Cause: The space quota for the segment owner in the tablespace has// been exhausted and the operation attempted the creation of a// new segment extent in the tablespace.// *Action: Either drop unnecessary objects in the tab
V$SESSION_LONGOPS(通过几个文章混合的)
本视图显示运行超过6秒的操作的状态。包括备份,恢复,统计信息收集,查询等等。要监控查询执行进展状况,你必须使用cost-based优化方式,并且:l 设置TIMED_STATISTICS或SQL_TRACE参数值为true。l 通过ANALYZE或DBMS_STATS数据包收集对象统计信息。你可以通过DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS过程添加application-specific长运行操作信息到本视图。关于DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS的更多信息可以浏览:Oracle Supplied PL/SQL Packages and Types Reference。V$SESSION_LONGOPS列说明l
关于实体化视图和查询重新的一些想法
通过上面三篇文章对实体化视图(物化视图)和查询重写的介绍和分析,我认为:实体化视图在数据复制、灾备和查询优化等等方面都有很好的应用前景。由于众多的应用限制,查询重写就是个垃圾!![@more@]
实体化视图和实体化视图查询重写的限制
查询重写的限制包括:1.如果实体化视图包括本地表和远端表,则只有本地表支持查询重写;2.基表和实体化视图都不能处于SYS用户下;3.实体化视图的查询中如果包含SELECT和GROUP BY列表,则二者必须保持一致;4.聚集函数必须在表达式的最外层;5.不允许CONNECT BY语句。实体化视图的限制:1.实体化视图中不能包括ROWNUM、SYSDATE等不可重复的表达式;2.实体化视图不能包括LONG或LONG RAW或对象参考列;3.如果实体化视图的查询定义中包括集合操作(如minus、union等),则实体化视图只支持全文匹配的查询重写;4.如果以PREBUILD方式建立实体化
实体化视图的创建和修改
一、权限grant create materialized view to user_name;grant query rewrite to user_name;---查询重写权限如果用户没有建表权限grant create any table to user_name;二、创建实体化视图日志create materialized view log on table_name;三、创建实体化视图create materialized view mview_namebuild immediate -------------说明1refresh fast on commit--------说明2enable query rewrite----------说明3asselect * from ^^^^^^;1.说明1:默认选项就是build immediate,意思是立刻建立实体化视图另一种方法是build deferred,此选项将
实体化视图的查询重写功能
实体化视图(materialized view)是一个很好的功能,他不像普通视图似的每次查询都需要重新运行一个sql语句,他会将查询的结果存在数据库中,占用一些物理空间。实体化视图可以提供一种叫做查询重写的功能,这个功能可以自动对查询语句进行优化。一、查询重写功能的前提:1.初始化参数QUERY_REWRITE_ENABLED设置成TRUE(默认值是FALSE)2.在创建实体化视图时指定ENABLE QUERY REWRITE子句3.数据库使用CBO二、如果没有使用查询重写功能就报错可以设置一个提示/*+REWRITE_OR_ERROR*/,这样如果这个select语句没有使用查询重写功能,它就会报
oracle中CBO的不稳定性
oracle中的CBO是一个智能化的程序,他会根据表内数据或者索引的不同,而执行不同的解释计划,在有时候他会很好。比如说:如果一个表有1000万条记录,而字段A中=1的数据有500万条,字段A上面有一个普通索引,当我们做下面查询的时候:select * from table where fielda=1;oracle就会选择全表扫描,而不是通过索引扫描。但是有时候oracle的CBO也会出现问题,他会不按照我们的安排来选择一个错误的执行计划。通过大量的对比我发现,oracle的CBO选择执行计划和下面几个因素是相关的:1.索引的使用通常出现CBO错误的表都带有索引2.oracle的统计
(zt)DBMS_STATS.GATHER_TABLE_STATS详解
作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息.DBMS_STATS.GATHER_TABLE_STATS的语法如下:DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sample BOOLEAN, method_opt VARCHAR2, degree NUMBER, granularity VARCHAR2, cascade BOOLEAN, stattab VARCHAR2, statid VARCHAR2, statown VARCHAR2, no_invalidate BOO
oracle中获得统计信息的方法
oracle的CBO是通过统计信息来解析出执行计划的,而对于一个新建立的数据库来说,因为没有执行过获取统计信息的程序,所以统计信息经常是错误的,这就需要我们经常手动收集统计信息,下面列一下几个简单的收集统计信息的方法:----得到一个表的统计信息(可以不加size skewonly,但速度会慢一些)DBMS_STATS.GATHER_TABLE_STATS(ownname => 'OWNER_NAME',tabname => 'TABLE_NAME',method_opt => 'for all indexed columns size skewonly');--直方图统计所有索引列DBMS_STATS.GATHER_TABLE_STATS(ownname => 'OWNER_NAME',tabn
oracle补丁地址,没下载过,不知道是否好用,从eygle copy的
oracle 9208 patch: ftp://updates.oracle.com/4547809/p4547809_92080_AIX64-5L.zipftp://updates.oracle.com/4547809/p4547809_92080_AXP.zipftp://updates.oracle.com/4547809/p4547809_92080_HP64.zipftp://updates.oracle.com/4547809/p4547809_92080_HPUX-IA64.zipftp://updates.oracle.com/4547809/p4547809_92080_LINUX-S390.zipftp://updates.oracle.com/4547809/p4547809_92080_LINUX.zipftp://updates.oracle.com/4547809/p4547809_92080_Linux-IA64.zipftp://updates.oracle.com/4547809/p4547809_92080_Linux-x86-64.zipftp:
oracle关于cursor的两个参数
open_cursors指每个session可以同时打开的游标个数。 这个值设的越大越好,缺省值是300,可以设成800 session_cached_cursors指每个session可以放在内存中的游标数量 对于java程序来说,没打开一个ResultSet,就会在数据库中打开一个游标,cached cursors就会增加一个。 所以对于一个java程序的数据库来说,如果内存足够的话,这个参数应该设置的大一些,设置成2000比较合适。 如果open的cursor超过了2000,那么这些cursor就会被从内存中清除出去。 而对于plsql来说,如果打开一个游标,只会使这个参数的值增加1,每次游标next,这
对于大数据量OLAP系统的一些经验
对于大数据量OLAP系统的一些经验:1.oracle的CBO影响oracle的CBO很不稳定,尤其是在有多个索引的干扰之下,oracle自己会选用nested loop来运行。我们需要在脚本中用hint指定使用哈希连接。使用方法:select /*+use_hash(a b)*/ a.*,b.* from table_name1 a,table_name2 bwhere a.column_name=b.column_name;有时oracle的CBO甚至会傻到去全扫描数据库索引,然后回表再查出数据。这是也需要指定不使用索引,或者直接全表扫描/*+no_index*/ /*+full(table_name)*/2.nested loop和hash join对于OLTP系统来说,由于单个select语句很小,而且一
数据库PGA内存对应HASH JOIN数据量估算
数据库PGA内存对应HASH JOIN数据量估算1.oracle数据库的PGA分配多大比较合理 以一个8G内存的机器为例,分配给oracle的内存大概占到总内存的80% 对于OLAP系统来说,分配给PGA的内存=8G*80%*50%=3.2G 对于OLTP系统来说,分配给PGA的内存=8G*80%*20%=1.28G2.对于单个session能够得到的最大PGA是多大。 ORACLE缺省每个session可使用的内存并不是全部PGA大小,实际上比这个小得多,普通会话可使用只有PGA的5%,并且不能超过100M。 对于OLAP系统来说,单个session的PGA=min(3.2G*5%,100M)=min(160M,100M)=100M 对于OLTP系统来说,单个session的P
AWR、ASH和Statspack的生成语句
---Statspack初始化方法(必须拥有DBA权限)@$ORACLE_HOME/rdbms/admin/spcreate.sql---Statspack删除方法@$ORACLE_HOME/rdbms/admin/spdrop.sql---Statspack清除方法@$ORACLE_HOME/rdbms/admin/sptrunc.sql---Statspack创建快照方法sqlplus perfstat/perfstatexec statspack.snapselect snap_id,snap_time from stats$snapshot;--生成Statspack报告方法@$ORACLE_HOME/rdbms/admin/spreport.sql--根据上面查询出来的快照号码来生成报告ASH和AWR都是oracle自动创建的,不用手动创建AWR快照也是一个小时一个自动创建的ASH是看最近的性能的,
关于oracle的CBO一些不可思议的事情
1)今天运行了下面的脚本insert into FS_DEVICE_CURRENT_COLD( current_id,manufacturer,device_instance_id, MODEL, DEVICE_VERSION, LAST_MODIFIED_TIME, DEVICE_ID, NODE_MASK, NODE_MASK_ID ) select /*+use_hash(b a)*/ b.CURRENT_ID, b.manufacturer,b.device_instance_id, b.MODEL, b.DEVICE_VERSION , b.LAST_MODIFIED_TIME, a.DEVICE_ID, 0 NODE_MASK, 0 NODE_MASK_IDfrom odomain19.FS_DEVICE_CURRENT b, mvp_device_instance_cold a where b.device_instance_id= a.device_instance_id(+);这是一条普通的插入语句,表a有