大表里有数据时表分区参考脚本
近期关于表分区进行一定学习和参考网上的部分资料的基础上,对原表有数据情况时的三种分区方法进行部分补充:--方法一,利用原表重建分区表(本测试是通过system用户登录并执行的)drop table tdrop table t_oldCREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE); INSERT INTO TSELECT ROWNUM, SYSDATE - ROWNUM FROM DBA_OBJECTS WHERE ROWNUM <= 2000;COMMIT;CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE (TIME) (PARTITION P1 VALUES LESS THAN (TO_DATE('2008-1-1', 'YYYY-MM-DD')), PARTITION P2 VALUES LESS THAN (TO_DA
EXPDP的parallel参数
同一台服务器(OS:Linux 2.6.9-78.ELlargesmp,DB:10.2.0.1.0 - 64bit Production),导出不同的用户,一个没有报错,另一报如下错误:ORA-31693: Table data object "GDGDZC"."SYS_EXPORT_SCHEMA_01" failed to load/unload and is being skipped due to error:ORA-02354: error in exporting/importing dataORA-00942: table or view does not exist而导出脚本核心语句如下:expdp gdgdzc/gdgdzc dumpfile=dump_dir:gdgdzc.$FILE_DATE.dmp logfile=dump_dir:gdgdzc.log[@more@]网上查询发现expdp也存在bug,参数par
exp/imp来避开ORA-31644错误
系统中有个13G以上的大表,使用expdp/impdp工具时遇到了RA-31644错误,网上也找不到满意的答案,最终使用exp/imp时发现导入成功,具体命令如下: [@more@]expdp system/system@test1 DIRECTORY=DUMPDIR DUMPFILE=HD_EXPEND_111028.dmp tables=(REP.HD_EXPEND) content=all LOGFILE=exp1028_REP.log; --通过SCP命令导出到报表服务器,扩展需要导入数据的表空间:alter tablespace rep add datafile '/data/oradata/rep_08.dbf' size 6000M --使用impdp进行导入:impdp system/system@test2 DIRECTORY=IMPDIR tables=(HD_ITV_EXPEND) DUM
alter table move跟shrink space的区别
都知道alter table move 或shrink space可以收缩段,用来消除部分行迁移,消除空间碎片,使数据更紧密,但move 跟shrink space还是有区别的。Move会移动高水位,但不会释放申请的空间,是在高水位以下(below HWM)的操作。而shrink space 同样会移动高水位,但也会释放申请的空间,是在高水位上下(below and above HWM)都有的操作。也许很难理解吧,看测试就知道了。[@more@]alter table move跟shrink space的区别2010-04-13 20:03都知道alter table move 或shrink space可以收缩段,用来消除部分行迁移,消除空间碎片,使数据更紧密,但mo
过期数据的定期清理机制来提高系统稳定性
最近应用系统响应速度偶尔出现缓慢,今天应用日志报了如下错误:2011-10-20 11:55:18,757 ERROR - 2011-10-20 11:55:18 org.apache.tomcat.util.threads.ThreadPool logFull????: All threads (75) are currently busy, waiting. Increase maxThreads (75) or check the servlet status 从该日志看系统慢的时候做了重复操作,导致等待的线程越来越多,最终达到最大线程数。 当系统性能出现问题时,我们很多时候考虑购买高档设备来解决日益猛增的业务数据和需求。但是对过期数据(所谓垃圾数据)不建立合理的归档清理机制,恐怕再好的硬件
归档日志满导致的数据库挂起故障处理
当数据库运行在归档模式时,如果没有做好备份策略或归档文件和备份文件放到同一个逻辑区,则偶尔会遇到归档日志满导致系统挂起事故。在这样情况下,重启数据库不仅没有用而且将问题更复杂化(记得重启后在HA模式下的共享存储也不见了,进行了手工mount后进行手工删除部分归档日志)。 根据实际环境有不同处理方法,如下是比较通用的处理过程:1、查看数据库日志文件(alert_log)2、查看用于归档日志或备份的磁盘空间3、删除归档日志物理文件,归档日志一般都是位于目录下4、把归档日志的物理文件删除后,Oracle就可以恢复正常了,但是还没
Rman增量压缩备份来解决备份空间不足
在日常备份方案中,一般将备份文件和归档日志放到同一逻辑分区。这样随着数据量的不断增加,数据库备份将会成为归档日志满导致的数据库挂起问题主要因素。数据库RMAN存储位置在: /backup/rman/ 数据库采取的备份恢复方案:RMAN备份恢复方案。备份周期如下表所示:执行时间星期日星期一星期二星期三星期四星期五星期六(RMAN)4:00RMAN完全备份增益备份(二级)增益备份(二级)增益备份(一级)增益备份(二级)增益备份(二级)增益备份(一级)[@more@]RMAN备份恢复方案RAMN备份周期及备份路径备份周期由服务器上的crontab文件中作业来实现,具体时间
auxiliary database: ORA-12528错误
在Oracle Data Guard的重建过程中,曾经发生的一次故障,现在回想应该属于备库动态监听和重启监听器问题导致的。因当时某种原因导致,Data Guard环境需要重新搭建。为此,当我在主库上执行RMAN备份后复制到,备库的服务器,但是执行到如下步骤时,开始出错,然后我又把备库的监听器重启了... 1:RMAN> backup database format='/backup/full_%u%p%s.dbf' include current controlfile for standby; 2:将rman的备份集拷贝至standby库相同的路径 3 复制主数据库RMAN备份及控制文件到备库 注意:备份存放位置要与primary database RMAN
Oracle Listener 动态注册与静态注册
注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。 在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。) 相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连
RAC和Data Guard环境中修改用户密码
RAC和Data Guard中修改用户帐号时,按照是否会修改口令文件($ORACLE_HOME/dbs/orapw$ORACLE_SID分两种情况:1, 普通用户普通用户在V$PWFILE_USERS中没有记录, 信息不会保存在口令文件中,所以修改口令时,只会修改数据字典信息,而数据字典存在system表空间中,属性数据库的数据文件,而datafile在RAC中是共享的.所以,在任何节点执行修改动作都可以, 可以立即生效[@more@]例如修改system用户密码,则具体步骤如下:查看V$PWFILE_USERS里有没有我们要修改的用户名,如果没有说明该用户属于普通用户,如下查询结果显示system用户不在该列表上,因此
主机名更改导致的无法监听案例
今天windows 2003上的Oracle 10g数据库的listener(监听器)无法连接,诊断过程如下:C:Documents and SettingsAdministrator>lsnrctl reload LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 19-9月 -2011 18:04:50 Copyright (c) 1991, 2005, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=svctag-852423x)(PORT=1521)))TNS-12545: 因目标主机或对象不存在, 连接失败 TNS-12560: TNS: 协议适配器错误 TNS-00515: 因目标主机或对象不存在, 连接失败 32-bit Windows Error:
Oracle用户密码被锁定导致的故障
曾经一次发生的过的系统故障,虽然问题解决起来很简单,但是确实值得记录。当时接到电话说业务系统无法登录,导致整个业务无法办理。之前是因为好多后台操作人员虽然给他们已经分配了属于自己的用户名和密码,但是部分人还是喜欢通过应用系统连接数据库时所用的用户进行登录,因此修改了该用户的密码。当我登录到数据库服务器检查后发现应用系统所用的sm用户被锁定了,具体处理过程如下:[@more@]SQL>sqlplus 用户/密码@数据库服务 as sysdba;SQL> select * from v$version;BANNER------------------------------------------------
Data guard archive GAP 故障处理案例
1、主库服务器日志报错如下:Thu Jun 17 10:47:30 2010Error 12541 received logging on to the standbyCheck whether the listener is up and running.Thu Jun 17 10:48:30 2010Error 12541 received logging on to the standbyCheck whether the listener is up and running.Thu Jun 17 10:49:31 2010Error 12541 received logging on to the standbyCheck whether the listener is up and running. 查找Oracle alertlog 日志,发现故障发生时间的日志信息: Mon Jun 14 11:03:39 2010Thread 1 advanced to log sequence 154816 Curren
索引rebuild和rebuild online时要慎重
这是曾经发生的一次故障,作为教训和备忘还是决定记录下来。生产系统有个千万行级别的表,原本是晚上跑的job中,因某个存储过程中的批量插入语句直到第二天白天没法执行完原因,合作伙伴工程师觉得系统有点慢,为了加开插入速度而直接将该表主键意外的索引都删除掉了。结果出现大量全表扫描和行锁竞争(row lock contention),导致OLTP系统根本无法办理业务。虽然作为DBA的我采用了rebuild online方式,但是还是无济于事,终于关掉应用后重新创建了索引,具体所花时间如下:2010-9-4 系统崩溃事件1、删除表table_name上除主键意外的索引
根据SQL Id获得SQL语句的执行计划
对于在生成的AWR报告中被发现的消耗资源较多的SQL语句,根据SQL Id可以使用AWR提供的awrsqrpt.sql(或awrsqrpi.sql)脚本达到获取SQL语句执行计划的目的。以上两个脚本的详细路径在$ORACLE_HOME/rdbms/admin/目录下。其中awrsqrpt.sql用于本地默认数据库,而awrsqrpi.sql不仅可以到处本地默认数据库所对应的SQL执行计划,也可以用于AWR数据导入后异地数据库SQL执行计划(用于远程诊断及分析)。在awrsqrpi.sql中的如下notes说明这一点:NOTESRun as SYSDBA. Generally this script should be invoked by awrsqrpt,unless you want to pick
ora-12542(Windows2003下 Oracle监听器启动后自动关闭)
今天发现Windows 2003server上的Oracle 监听器无法启动,在Windows服务里启动后立即停止,在cmd环境下执行lsnrctl start命令会报ora-12542错误。实际上以上监听器异常现象在前几天偶尔出现,后来监听器端口被占用原因,应用系统所对应的数据库用户无法链接数据库。 处理过程:1、重建监听器没有用,重启服务器后也是没法连接数据库(sys / as sysdba可以连接,并可以正常启动和关闭数据库);2、因数据库小,因此先备份(expdp)好数据后重新安装Oracle并重建数据库,还是不行。[@more@]3、以上方法都失败后,我开始搜索网络,如下是从<
AWR数据的导出和导入全过程
导出导入AWR数据,不仅对远程诊断有用,而且对历史数据的对比诊断也是很有价值。例如, 最近某个SQL突然变慢,想看看他过去的这段时间该SQL的执行计划及AWR报告,那也可以利用AWR的导出导入功能(前提是将每个月的AWR数据导出后进行归档)。如下是导出导入的全过程:[@more@]1、因为在导出(或导入)时,我们需要指出导出(导入)文件存放路径。因首先要建立导出(或导入)路径。 SQL>connect sys/password as sysdba; SQL>create directory dump_awr as ‘E:DBwork’; SQL>grant read,write on directory dump_dir
Linux Shell命令换行问题(转)
后面回车不会马上执行本条命令而是换行继续。; 是运行完前面就继续后面的,&& 同样是前面正确就运行后面,|| 是前面运行不正确就运行后面。 [@more@]源文档
借助10053跟踪事件理解SQL执行过程
今天在笔记本电脑上对10053跟踪事件进行了测试,发现跟踪文件无论在内容或注释方面都有了明显的改进,而且增加了执行计划。看了一遍后对SQL的执行过程(尤其是join order)有了进一步的认识。具体执行过程如下:SYSTEM@kuqlan10>alter session set events '10053 trace name context forever,level 2';会话已更改。SYSTEM@kuqlan10>select d.deptno,d.dname,e.ename,e.job2 from scott.dept d,scott.emp e3 where d.deptno=e.deptno4 and e.ename='SCOTT';DEPTNO DNAME ENAME JOB---------- -------------- ---------- ---------20
成本(CPU Costing)的含义
在执行计划的中CPU COSTING究竟代表什么呢?最近在看"Cost-Based Oracle Fundamentals"时对此有了比较满意的了解。因此决定在此分享给大家。实际上Costing的单位就是时间,成本表示(也总是表示)优化器对执行语句所用时间的最优估计。在Oracle9i中,优化器引入了一个新的功能,称为CPU成本计算(CPU costing)。为什么我们如此的确信成本应该可以用等价的时间表示呢?在"Performance Tuning Guide and Reference(9.2).pdf"中的原文解释如下:[@more@]CPU Costing ModelEvery database operation uses the CPU. In mo