ORA-00600 3020 Lost Write写丢失问题分析
最近半年在客户和测试环境前后发生了3次ORA-00600 [3020]错误, 都是在11g data guard环境下做完switchover切换操作之后, Standby的MRP进程起不来了.Errors in file /d/db/oradata/diag/rdbms/oss/oss/trace/oss_pr01_11035.trc (incident=324505):ORA-00600: internal error code, arguments: [3020], [3], [3712], [3712], [], [], [], [], [], [], [], [] ORA-10567: Redo is inconsistent with data block (file# 3, block# 3712, file offset is 30408704 bytes) ORA-10564: tablespace UNDOTBS1 ORA-01110: data file 3: '/d/db/oradata/oss/undotbs0
关于隐藏参数:_no_recovery_through_resetlogs
这个参数用于限制恢复能否跨越resetlogs,对于数据库的恢复来说,resetlogs通常意味着不完全恢复,在数据库resetlogs打开之后,控制文件中的很多信息被改写,在Oracle 10g之前,如果数据库resetlogs打开,那么将不再能够通过当前的控制文件再次进行resetlogs点之前的恢复,而Oracle 10g改变了这个历史。在Oracle 10g中,即使通过resetlogs方式打开了数据库,Oracle仍然支持再次从resetlogs时间点之前进行恢复;在Clone数据库时,Oracle设置这个参数为True,意思就是不允许再次进行跨越resetlogs时间点的恢复。[@more@]
关于expdp在solaris RAC环境上不能执行出错的解决
报错如下:ORA-31626: job does not existORA-31637: cannot create job SYS_EXPORT_SCHEMA_01 for user NAP3ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPV$FT_INT", line 606ORA-39080: failed to create queues "" and "" for Data Pump jobORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPC$QUE_INT", line 1550ORA-01403: no data found这种错误通常都是由于Oracle软件升级之后和库不一致产生的,需要重新执行catalog.sql an
关于在Oracle中删除表空间中的数据文件的问题
在10gR2之前,使用alter database datafile offline drop方法只能是让表空间的数据文件脱机,不是真正删除,在数据字典 v$datafile,dba_data_files里面还是能够查到这些offline的文件的信息;要清除这些数据字典中的信息,只能是删除整个表空间; 从10gR2开始,支持语法alter tablespace drop datafile来删除一个空的数据文件,相关信息也从数据字典中删除[@more@]
oracle10g RAC中查看Private IP的方法
1> 查看oracle数据字典gv$cluster_interconnects (10gR2)SQL> select * from gv$cluster_interconnects; INST_ID NAME IP_ADDRESS IS_PUBLIC SOURCE---------- --------------- ---------------- --------- ------------------------------- 1 interface 10.10.10.11 NO Oracle Cluster Repository 2 interface 10.10.10.12 NO Oracle Cluster Repository 2> 查看oracle内部的表x$ksxpiaSQL> conn sys/sys@grid1 as sysdba已连接。SQL>
发现dba_segments和dba_extents中统计段空间大小居然不一样
最近在测试系统上发现dba_segments和dba_extents中统计段空间大小居然不一样SQL> select bytes,blocks,extents from dba_segments where segment_name='PROFILE' and owner='NAP3'; BYTES BLOCKS EXTENTS---------- ---------- ---------- 0 0 0SQL> select bytes,blocks,extent_id from dba_extents where segment_name='PROFILE' and owner='NAP3'; BYTES BLOCKS EXTENT_ID---------- ---------- ---------- 167772160 20480 0在metalink上搜索到如下资料: D
升级时产生错误:Error:*** Alert: Invalid staging area
使用脚本升级10.1.0.4到10.1.0.5时报错: Preparing to launch Oracle Universal Installer from /tmp/OraInstall2008-08-25_07-05-05AM. Please wait ...Oracle Universal Installer, Version 10.1.0.5.0 ProductionCopyright (C) 1999, 2005, Oracle. All rights reserved................................................................100% Done.Error:*** Alert: Invalid staging area. There are no top level components for Solaris Operating System (SPARC) available for installation in this staging area. ***开始以
RAC中报错ORA-01092: ORACLE instance terminated. Disconnection forced
今天做Oracle RAC环境下升级10.1.0.5的回退工作。其中通过在startup upgrade状态下执行一些sql脚本,但每次startup upgrade老是报错: ORA-01092: ORACLE instance terminated. Disconnection forced [@more@]检查日志: Errors in file /opt/profdb/trace/nap3x1_ora_18676.trc: ORA-39701: database must be mounted EXCLUSIVE for UPGRADE or DOWNGRADE Error 39701 happened during db open, shutting down database USER: terminating instance due to error 39701 比较了一下升级时的步骤,少了步设置CLUSTER_DATABASE=FALSE,这步在
静默(silent)升级Oracle10g RAC 10.1.0.4 to 10.1.0.5
近期针对客户10.1.0.4的RAC平台做了个脚本升级到10.1.0.5RAC环境:solaris 两个节点:clnode1 clnode2步骤如下: 1. upgrade oracle software1.1 shutdown database (run on clnode1) shutdown instance on all nodes: $ORACLE_HOME/bin/srvctl stop database -d db_name 1.2 shutdown all processes lisntener and CSS as root (run on clnode1) #/etc/init.d/init.cssd stop1.3 upgrade crs software and database software (run on clnode1) (note: need to make rac_crs.rsp and rac_db.rsp) $./runInstaller -silent
10g R2中connect角色权限的变化
Oracle10gR2在部署安全配置的时候,提供了额外的安全性,强制使用了最少特权原则:对于经常使用的CONNECT角色仅仅提供了连接数据库所需要的权限,即CREATE SESSION权限.过去许多年以来,CONNECT角色一直应用在许多代码,应用,和文档中,尽管CONNECT角色被频繁使用在建立账户的时候,但是仅仅连接数据库,是不需要如此多的权限的.10g R2中Connect角色权限的删减[@more@]每个用户应当只仅仅授予他们所需要的合适的权限,最小化的权限避免了风险,减少了无意操作和恶意操作所带来的危害CONNECT角色现在只有这一个权限: CREATE SESSION其他7个
批量绑定中的SAVE EXCEPTION 子句
Oracle 从9i 开始增强了批 DML 在发生异常时处理的错误及失败的程序执行能力。这是通过FORALL 语句的 SAVE EXCEPTION 子句来实现,其语法如下: FORALL index in lower..upper save exceptionsSAVE EXCEPTIONS 子句是 oracle 9i 中引入的,它在一个隐式游标属性SQL%BULK_EXCEPTIONS 中保存错误行,允许 FORALL 语句继续处理其余行。下面这一段代码是 SQL%BULK_EXCEPTIONS 的应用例子:[@more@]create or replace procedure batch_dml(errnum outnumber,errtext outvarchar2)is type user_id_tab istableofnumberindexbybinary_intege
给Oracle数据库打补丁[转载]
给软件打补丁相当于给人打预防针,对系统的稳定运行至关重要。本文详细、系统地介绍了Oracle数据库补丁的分类、安装、管理等问题。厂商提供给用户的软件补丁的形式多为编译后的库函数,所以安装软件补丁实际上就是把这些库函数拷贝到相应目录,并在需要时进行联接操作。软件公司一般在一段时间后会把针对某一版本的所有补丁进行整理:合并融合,解决冲突,进行整体测试,并使文件拷贝和联接操作自动执行,得到一个软件补丁“包”。不同的公司使用不同的名称,现在一般计算机用户都熟悉的Windows ServicePack就是这样的补丁包。Oracle公司给
关于外键未加索引引起锁问题
测试:session 1:SQL> delete from emp where emp.deptno=10;session 2:SQL> delete from dept where deptno=40;现象:在emp的字段deptno没有索引时session 2等待, 有索引则不等待.结论:如果没有索引时,对父表的操作,会级联加一个TM S锁(level 4)到子表上; 如果有索引时,对父表的操作,会级联加一个TM RS锁(level 2)到子表上; 这时如果子表上本身就有个TM RX锁(这种锁很容易产生,insert update delete都会产生这种锁), TM S锁和TM RX锁是互斥的, TM RS锁和TM RX锁是相容的.[@more@]
ORA-19809: limit exceeded for recovery files
今天有客户报启动数据库遇到如下问题:ORA-16038: log 3 sequence# 1126 cannot be archivedORA-19809: limit exceeded for recovery filesORA-00312: online log 3 thread 1: '/opt/oracle/product/10.1/oradata/orcl/redo03.log'查了一下错误信息ORA-19809: limit exceeded for recovery files Cause: The limit for recovery files specified by the DB_RECOVERY_FILE_DEST_SIZE was exceeded. Action: The error is accompanied by 19804. See message 19804 for further details. [@more@]ORA-19804: cannot reclaim string by
关于ORA-00376错误的恢复
今天遇到ORA-00376错误:SQL> select count(*) from bb_bb60.course_main;ORA0-00376: "file '/data/data1/blackboard/oracle/data/bb_bb60_indx_file1.dbf' cannot be read at this time"重启数据库没有问题,怀疑数据文件有问题:[@more@]SQL> select file#,status from v$datafile; FILE# STATUS---------- ------- 1 SYSTEM 2 ONLINE 3 ONLINE 4 ONLINE 5 ONLINE 6 ONLINE 7 ONLINE 8 ONLINE 9 ONLINE 10 ONLINE 11 ONLI
在Oracle10g中使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能
从Oracle10g版本1开始,提供了新的包DBMS_ADVANCED_REWRITE来实现查询重写。它允许你截获特定的SQL语句,并将其重定义为另一个SQL语句。下面是一个简单的例子:1、确认测试用户有必要的权限去运行 CONN sys/password AS SYSDBA GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO test; GRANT CREATE MATERIALIZED VIEW TO test;[@more@]2、创建测试用表 CONN test/test DROP TABLE rewrite_test_tab; CREATE TABLE rewrite_test_tab ( id NUMBER, description VARCHAR2(50), CONSTRAINT rewrite_test_tab_pk PR
10g中的绑定变量的捕获功能
有时我们在调试程序时往往会遇到这种情况:由于程序中使用了绑定变量技术,所以无法从v$sql这些视图中获取到变量的具体值。从10g开始, oracle提供了捕获绑定变量值的功能。 [@more@]首先查看当前的10g系统是否启动了绑定变量捕获功能:select statistics_name, description, session_statusfrom V$STATISTICS_LEVELwhere statistics_name = 'Bind Data Capture'缺省情况下系统每15分钟取样一次,如果你的系统压力比较小的话,也可以减小这个时间。可以通过修改隐藏参数来实现:ALTER SYSTEM SET "_CURSOR_BIND_CAPTURE_INTERVAL"
Oracle10G的silent(静默)安装、升级和卸载
Oracle提供了不需要OUI的安装,本文主要介绍了以下三个方面的内容:1、如何以silent模式安装和卸载10g的软件2、如何以silent模式安装和卸载10g数据库3、如何以silent模式将9i库升级到10g测试环境:1、RHEL AS3U8 2、Solaris 9要安装的是Oracle10.2.0.1 系统上已经安装有Oracle9.2.0.4 [@more@]1、如何以silent模式安装和卸载10g的软件1.1 制作response文件,该文件记录了交互式中回答的值 有两种方式制作: <1> 在安装软件目录下有个response目录, 其下有enterprise.rsp standard.rsp custom.rsp 可以配置其中一个文件
关于参数_b_tree_bitmap_plans的设置
最近做一个应用系统的升级工作,其中数据库升级部分执行到一半就停下来了,检查数据库,发现是停在一个批量调用insert语句中.将语句找出来手工执行,发现一次insert操作都要125秒, 仔细检查执行计划, 发现居然没有进行并行扫描(本来系统设置了并行扫描功能),而且在别的系统中都可以正常执行.经过对比执行计划后发现, 有问题的系统中把B树索引转换为bitmap索引后再进行比较,导致并行功能没有启动. 查阅相关资料后确定:该转换由隐藏参数_b_tree_bitmap_plans决定。如果该参数为true,则进行转换,否则不进行转换。而8i里,该参数缺省为false,所
update关联更新在sqlserver和oracle中的实现
sqlserver和oracle中实现update关联更新的语法不同,都可以通过inline view(内嵌视图)来实现,总的来说sqlserver更简单些. 测试例子如下:[@more@]create table tmp_a(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));create table tmp_b(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));insert into tmp_a(cpcode,sb_ym,flag)values('3201910001','200406','e');insert into tmp_a(cpcode,sb_ym,flag)values('3201910002','200406','e');insert into tmp_b(cpcode,sb_ym,flag)values('3201910001','200406','r');insert into tm