删除online日志测试及ora-600 [4194]错误的处理

今天做了一个关于破坏online日志的恢复测试,主要三个场景:

测试1:正常关闭数据库后删除非当前日志

测试2:正常关库后,删除在线日志文件

测试3:非正常关闭数据库,并删除当前在线日志文件

我的测试环境是Oracle 10.2.0.1 32bit的数据库,OS版本为red hat 5.3,下面看具体测试经过:

测试1:正常关闭数据库后删除非当前日志

[[email protected] ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 6月 24 10:34:53 2015

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 CURRENT
       NO

2    1 INACTIVE
       YES

3    1 ACTIVE
       YES

[email protected]> set line 130 pages 130

[email protected]> col member for a50

[email protected]> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER      IS_

---------- ------- ------- -------------------------------------------------- ---

3   ONLINE  /u01/app/oracle/oradata/ora10g/redo03.log      NO

2   ONLINE  /u01/app/oracle/oradata/ora10g/redo02.log      NO

1   ONLINE  /u01/app/oracle/oradata/ora10g/redo01.log      NO

[email protected]> conn zlm/zlm

Connected.

[email protected]> create table t1 as select * from dba_objects where 1=2;

Table created.

[email protected]> insert into t1 select * from dba_objects where rownum<11;

10 rows created.

[email protected]> select count(*) from t1;

COUNT(*)

----------

10

[email protected]> commit; (此处不commit也可,因为对在线日志归档的时候会进行commit操作)

Commit complete.

[email protected]> alter system archive log current;

System altered.

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 ACTIVE
       YES

2    1 CURRENT
       NO

3    1 INACTIVE
       YES

--删除非当前的在线日志文件(ACTIVE的和INACTIVE的)

[[email protected] backupsets]$ cd /u01/app/oracle/oradata/ora10g/

[[email protected] ora10g]$ pwd

/u01/app/oracle/oradata/ora10g

[[email protected] ora10g]$ ls -l

total 1461348

-rw-r----- 1 oracle oinstall   7520256 Jun 24 10:40 control01.ctl

-rw-r----- 1 oracle oinstall   7520256 Jun 24 10:40 control02.ctl

-rw-r----- 1 oracle oinstall   7520256 Jun 24 10:40 control03.ctl

-rw-r----- 1 oracle oinstall 104865792 Jun 24 10:38 example01.dbf

-rw-r----- 1 oracle oinstall    172032 Nov 29  2014 indx01.dbf

-rw-r----- 1 oracle oinstall  52429312 Jun 24 10:39 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Jun 24 10:39 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Jun 24 10:34 redo03.log

-rw-r----- 1 oracle oinstall 283123712 Jun 24 10:38 sysaux01.dbf

-rw-r----- 1 oracle oinstall 587210752 Jun 24 10:38 system01.dbf

-rw-r----- 1 oracle oinstall  52436992 Jun 23 16:17 temp01.dbf

-rw-r----- 1 oracle oinstall 173023232 Jun 24 10:38 undotbs01.dbf

-rw-r----- 1 oracle oinstall  41951232 Jun 24 10:38 users01.dbf

-rw-r----- 1 oracle oinstall 100671488 Jun 24 10:38 zlm01.dbf

[[email protected] ora10g]$ rm -f redo01.log

[[email protected] ora10g]$ rm -f redo03.log

[[email protected] ora10g]$ ls -l redo*

-rw-r----- 1 oracle oinstall 52429312 Jun 24 10:44 redo02.log

[[email protected] ora10g]$

测试1:正常关闭数据库后删除非当前日志

--正常关闭数据库并重启

[email protected]> shutdown immediate

ORA-01031: insufficient privileges

[email protected]> conn / as sysdba

Connected.

[email protected]> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[email protected]> startup

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  318767328 bytes

Database Buffers  201326592 bytes

Redo Buffers
    2973696 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo01.log‘

提示无法打开日志组1的日志文件,因为之前在OS层面已经将其删除了

--观察alert日志 

[[email protected] ora10g]$ cd /u01/app/oracle/admin/ora10g/bdump/

[[email protected] bdump]$ tail -50f alert_ora10g.log

MMON started with pid=11, OS id=2970

Wed Jun 24 10:45:54 2015

starting up 1 dispatcher(s) for network address ‘(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))‘...

starting up 1 shared server(s) ...

CJQ0 started with pid=10, OS id=2968

MMNL started with pid=12, OS id=2972

Wed Jun 24 10:45:55 2015

ALTER DATABASE   MOUNT

Wed Jun 24 10:45:58 2015

Setting recovery target incarnation to 8

Wed Jun 24 10:45:58 2015

Successful mount of redo thread 1, with mount id 4202063779

Wed Jun 24 10:45:58 2015

Database mounted in Exclusive Mode

Completed: ALTER DATABASE   MOUNT

Wed Jun 24 10:45:59 2015

ALTER DATABASE OPEN

Wed Jun 24 10:45:59 2015

LGWR: STARTING ARCH PROCESSES

ARC0 started with pid=16, OS id=2980

Wed Jun 24 10:45:59 2015

ARC0: Archival started

ARC1: Archival started

LGWR: STARTING ARCH PROCESSES COMPLETE

Wed Jun 24 10:45:59 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_lgwr_2960.trc:

ORA-00313: Message 313 not found; No message file for product=RDBMS, facility=ORA; arguments: [1] [1]

ORA-00312: Message 312 not found; No message file for product=RDBMS, facility=ORA; arguments: [1] [1] [/u01/app/oracle/oradata/ora10g/redo01.log]

ORA-27037: Message 27037 not found; No message file for product=RDBMS, facility=ORA

Linux Error: 2: No such file or directory

Additional information: 3

Wed Jun 24 10:45:59 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_lgwr_2960.trc:

ORA-00313: Message 313 not found; No message file for product=RDBMS, facility=ORA; arguments: [1] [1]

ORA-00312: Message 312 not found; No message file for product=RDBMS, facility=ORA; arguments: [1] [1] [/u01/app/oracle/oradata/ora10g/redo01.log]

ORA-27037: Message 27037 not found; No message file for product=RDBMS, facility=ORA

Linux Error: 2: No such file or directory

Additional information: 3

Wed Jun 24 10:45:59 2015

ARC0: STARTING ARCH PROCESSES

ARC2: Archival started

ARC0: STARTING ARCH PROCESSES COMPLETE

ARC0: Becoming the ‘no FAL‘ ARCH

ARC0: Becoming the ‘no SRL‘ ARCH

ARC1 started with pid=17, OS id=2982

Wed Jun 24 10:46:00 2015

ARC1: Becoming the heartbeat ARCH

ARC2 started with pid=18, OS id=2984

Wed Jun 24 10:46:00 2015

ORA-313 signalled during: ALTER DATABASE OPEN...

发现确实是读取redo01.log文件错误,无法OPEN数据库,只停留在MOUNT状态

--清空刚才被删除的2个在线日志文件(相当于重建)

[email protected]> select open_mode from v$database;

OPEN_MODE

----------

MOUNTED

[email protected]> alter database clear logfile group 1;

Database altered.

[email protected]> alter database open;

alter database open

*

ERROR at line 1:

ORA-00313: open failed for members of log group 3 of thread 1

ORA-00312: online log 3 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo03.log‘

[email protected]> alter database clear logfile group 3;

Database altered.

[email protected]> alter database open;

Database altered.

[email protected]> conn zlm/zlm

Connected.

[email protected]> select count(*) from t1;

COUNT(*)

----------

10

[email protected]>

尽管删除了2个非在线日志文件,那么就可以很方便的将数据库打开,只要重建被删除的日志文件就行(通过CLEAR操作),且数据并不会丢失(因为是shutdown immediate方式关闭库的)

--继续查看alert日志内容

Wed Jun 24 10:48:55 2015

alter database clear logfile group 1

Wed Jun 24 10:48:56 2015

Clearing online log 1 of thread 1 sequence number 20

Wed Jun 24 10:48:56 2015

Errors in file /u01/app/oracle/admin/ora10g/udump/ora10g_ora_2978.trc:

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo01.log‘

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Completed: alter database clear logfile group 1

Wed Jun 24 10:49:03 2015

alter database open

Wed Jun 24 10:49:03 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_lgwr_2960.trc:

ORA-00313: Message 313 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1]

ORA-00312: Message 312 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1] [/u01/app/oracle/oradata/ora10g/redo03.log]

ORA-27037: Message 27037 not found; No message file for product=RDBMS, facility=ORA

Linux Error: 2: No such file or directory

Additional information: 3

Wed Jun 24 10:49:03 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_lgwr_2960.trc:

ORA-00313: Message 313 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1]

ORA-00312: Message 312 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1] [/u01/app/oracle/oradata/ora10g/redo03.log]

ORA-27037: Message 27037 not found; No message file for product=RDBMS, facility=ORA

Linux Error: 2: No such file or directory

Additional information: 3

ORA-313 signalled during: alter database open...

Wed Jun 24 10:49:14 2015

alter database clear logfile group 3

Wed Jun 24 10:49:14 2015

Clearing online log 3 of thread 1 sequence number 19

Wed Jun 24 10:49:14 2015

Errors in file /u01/app/oracle/admin/ora10g/udump/ora10g_ora_2978.trc:

ORA-00313: open failed for members of log group 3 of thread 1

ORA-00312: online log 3 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo03.log‘

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Completed: alter database clear logfile group 3

Wed Jun 24 10:49:22 2015

alter database open

Wed Jun 24 10:49:22 2015

Thread 1 advanced to log sequence 22

Thread 1 opened at log sequence 22

Current log# 1 seq# 22 mem# 0: /u01/app/oracle/oradata/ora10g/redo01.log

Successful open of redo thread 1

Wed Jun 24 10:49:23 2015

db_recovery_file_dest_size of 2048 MB is 0.04% used. This is a

user-specified limit on the amount of space that will be used by this

database for recovery-related files, and does not reflect the amount of

space available in the underlying filesystem or ASM diskgroup.

Wed Jun 24 10:49:23 2015

MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set

Wed Jun 24 10:49:23 2015

SMON: enabling cache recovery

Wed Jun 24 10:49:23 2015

Successfully onlined Undo Tablespace 1.

Wed Jun 24 10:49:23 2015

SMON: enabling tx recovery

Wed Jun 24 10:49:24 2015

Database Characterset is ZHS16GBK

replication_dependency_tracking turned off (no async multimaster replication found)

Starting background process QMNC

QMNC started with pid=19, OS id=2993

Wed Jun 24 10:49:31 2015

Completed: alter database open

在CLEAR操作后,OS会创建相应的日志组成员文件,然后数据库就可以正常读取了,此时并不需要通过restore和recover对数据库进行恢复和还原即可

测试2:正常关库后,删除在线日志文件 

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 CURRENT
       NO

2    1 INACTIVE
       YES

3    1 UNUSED
       YES

[email protected]> insert into t1 select * from dba_objects where rownum<11;

10 rows created.

[email protected]> select count(*) from t1;

COUNT(*)

----------

20

[email protected]> alter system archive log current;

System altered.

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 ACTIVE
       YES

2    1 INACTIVE
       YES

3    1 CURRENT
       NO

--正常关闭数据库

[email protected]> shutdown immediate

ORA-01031: insufficient privileges

[email protected]> conn / as sysdba

Connected.

[email protected]> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[email protected]>

--OS上删除current的在线日志文件redo03.log

[[email protected] ~]$ cd /u01/app/oracle/oradata/ora10g

[[email protected] ora10g]$ ls -l

total 1461348

-rw-r----- 1 oracle oinstall   7520256 Jun 24 11:03 control01.ctl

-rw-r----- 1 oracle oinstall   7520256 Jun 24 11:03 control02.ctl

-rw-r----- 1 oracle oinstall   7520256 Jun 24 11:03 control03.ctl

-rw-r----- 1 oracle oinstall 104865792 Jun 24 11:03 example01.dbf

-rw-r----- 1 oracle oinstall    172032 Nov 29  2014 indx01.dbf

-rw-r----- 1 oracle oinstall  52429312 Jun 24 11:02 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Jun 24 10:49 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Jun 24 11:03 redo03.log

-rw-r----- 1 oracle oinstall 283123712 Jun 24 11:03 sysaux01.dbf

-rw-r----- 1 oracle oinstall 587210752 Jun 24 11:03 system01.dbf

-rw-r----- 1 oracle oinstall  52436992 Jun 23 16:17 temp01.dbf

-rw-r----- 1 oracle oinstall 173023232 Jun 24 11:03 undotbs01.dbf

-rw-r----- 1 oracle oinstall  41951232 Jun 24 11:03 users01.dbf

-rw-r----- 1 oracle oinstall 100671488 Jun 24 11:03 zlm01.dbf

[[email protected] ora10g]$ rm -f redo03.log

[[email protected] ora10g]$ ls -l redo*

-rw-r----- 1 oracle oinstall 52429312 Jun 24 11:02 redo01.log

-rw-r----- 1 oracle oinstall 52429312 Jun 24 10:49 redo02.log

[[email protected] ora10g]$

--启动数据库

[email protected]> startup

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  322961632 bytes

Database Buffers  197132288 bytes

Redo Buffers
    2973696 bytes

Database mounted.

ORA-00313: open failed for members of log group 3 of thread 1

ORA-00312: online log 3 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo03.log‘

由于启动数据库会检查所有的文件,读取到在线日志文件redo03.log时,就报错了,因为已经被删除

--还原数据库

[email protected]> recover database until cancel;

Media recovery complete.

[email protected]> alter database open;

alter database open

*

ERROR at line 1:

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

由于之前是正常关闭数据库,在线日志的内容已经写到归档日志文件,利用归档日志进行还原,而还原后的数据库,必须用resetlogs方式来OPEN数据库

[email protected]> alter database open resetlogs;

Database altered.

[email protected]> conn zlm/zlm

Connected.

[email protected]> select count(*) from t1;

COUNT(*)

----------

20

[email protected]>

只要是正常关闭数据库的,并且开启了归档,那么即便是删除了current的在线日志,也是可以将数据库重新打开的,并且不会丢失数据(由归档来保证)

测试3:非正常关闭数据库,并删除当前在线日志文件

--添加测试数据后,abort方式关闭数据库

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 CURRENT
       NO

2    1 UNUSED
       YES

3    1 INACTIVE
       YES

[email protected]> insert into t1 select * from dba_objects where rownum<11;

10 rows created.

[email protected]> select count(*) from t1;

COUNT(*)

----------

30

[email protected]> alter system archive log current;

System altered.

[email protected]> select group#,thread#,status,archived from v$log;

GROUP#    THREAD# STATUS       ARC

---------- ---------- ---------------- ---

1    1 ACTIVE
       YES

2    1 CURRENT
       NO

3    1 INACTIVE
       YES

[email protected]> shutdown abort

ORA-01031: insufficient privileges

[email protected]> conn / as sysdba

Connected.

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]>

--OS上将current在线日志文件redo02.log删除

[[email protected] ora10g]$ rm -f redo02.log

[[email protected] ora10g]$ ls -l redo*

-rw-r----- 1 oracle oinstall 52429312 Jun 24 11:16 redo01.log

-rw-r----- 1 oracle oinstall 52429312 Jun 24 11:08 redo03.log

--再次启动数据库

[email protected]> startup

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo02.log‘

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

[email protected]> alter database clear logfile group 2;

alter database clear logfile group 2

*

ERROR at line 1:

ORA-01624: log 2 needed for crash recovery of instance ora10g (thread 1)

ORA-00312: online log 2 thread 1: ‘/u01/app/oracle/oradata/ora10g/redo02.log‘

[email protected]> recover database until cancel;

ORA-00279: change 1497127 generated at 06/24/2015 11:08:48 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2015_06_24/o1_mf_1_2_%u_.arc

ORA-00280: change 1497127 for thread 1 is in sequence #2

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: ‘/u01/app/oracle/oradata/ora10g/system01.dbf‘

ORA-01112: media recovery not started

[email protected]>

之前使用的方法,在此处都不成立,原因是数据库强制要求current的在线日志文件需要crash recover,重新创建自然是不行的,由于是非正常关闭数据库,也没有写入归档文件,当然也无法进行还原,那么此时只有通过别的方法来将数据库OPEN了,当然丢失数据已经是不可避免的了,也就是刚才current在线日志文件中未归档的那部分,即t1表中最后插入的10条记录,权衡利弊,即便是丢数据,也要先将数据库拉起来,那么可以通过设置隐含参数"_allow_resetlogs_corruption=true"来实现

[email protected]> create pfile from spfile;

File created.

[email protected]> show parameter spfile

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile      string /u01/app/oracle/product/10.2.0

/db_1/dbs/spfileora10g.ora

[email protected]> host

[[email protected] ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs/

[[email protected] dbs]$ ls -l

total 7412

-rwxr-xr-x 1 oracle oinstall    5494 Aug 26  2014 alert_ora10g.log

-rwxr-xr-x 1 oracle oinstall    1544 Aug 25  2014 hc_ora10g.dat

-rwxr-xr-x 1 oracle oinstall   12920 May  3  2001 initdw.ora

-rwxr-xr-x 1 oracle oinstall    8385 Sep 11  1998 init.ora

-rw-r--r-- 1 oracle oinstall    1343 Jun 24 11:24 initora10g.ora

-rwxr-xr-x 1 oracle oinstall      24 Aug 25  2014 lkORA10G

-rw-r----- 1 oracle oinstall    1536 Nov 26  2014 orapwora10g

-rwxr-xr-x 1 oracle oinstall 7520256 Jun 24 11:09 snapcf_ora10g.f

-rw-r----- 1 oracle oinstall    3584 Jun 24 11:19 spfileora10g.ora

[[email protected] dbs]$ echo "_allow_resetlogs_corruption=true" >> initora10g.ora

[[email protected] dbs]$ cat initora10g.ora

ora10g.__db_cache_size=192937984

ora10g.__java_pool_size=4194304

ora10g.__large_pool_size=4194304

ora10g.__shared_pool_size=155189248

ora10g.__streams_pool_size=8388608

*._disable_image_check=TRUE

*.audit_file_dest=‘/u01/app/oracle/admin/ora10g/adump‘

*.background_dump_dest=‘/u01/app/oracle/admin/ora10g/bdump‘

*.compatible=‘10.2.0.1.0‘

*.control_files=‘/u01/app/oracle/oradata/ora10g/control01.ctl‘,‘/u01/app/oracle/oradata/ora10g/control02.ctl‘,‘/u01/app/oracle/oradata/ora10g/control03.ctl‘#Restore Controlfile

*.core_dump_dest=‘/u01/app/oracle/admin/ora10g/cdump‘

*.db_block_size=8192

*.db_cache_size=0

*.db_domain=‘‘

*.db_file_multiblock_read_count=16

*.db_name=‘ora10g‘

*.db_recovery_file_dest=‘/u01/app/oracle/flash_recovery_area‘

*.db_recovery_file_dest_size=2147483648

*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=ora10gXDB)‘

*.java_pool_size=4194304

*.job_queue_processes=10

*.large_pool_size=4194304

*.log_archive_format=‘%t_%s_%r.dbf‘

*.nls_language=‘SIMPLIFIED CHINESE‘

*.nls_territory=‘CHINA‘

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile=‘EXCLUSIVE‘

*.sga_max_size=524288000

*.sga_target=369098752

*.shared_pool_size=0

*.statistics_level=‘TYPICAL‘

*.streams_pool_size=8388608

*.undo_management=‘AUTO‘

*.undo_tablespace=‘UNDOTBS1‘

*.user_dump_dest=‘/u01/app/oracle/admin/ora10g/udump‘

_allow_resetlogs_corruption

[[email protected] dbs]$ vi initora10g.ora

[[email protected] dbs]$ cat initora10g.ora

ora10g.__db_cache_size=192937984

ora10g.__java_pool_size=4194304

ora10g.__large_pool_size=4194304

ora10g.__shared_pool_size=155189248

ora10g.__streams_pool_size=8388608

*._disable_image_check=TRUE

*.audit_file_dest=‘/u01/app/oracle/admin/ora10g/adump‘

*.background_dump_dest=‘/u01/app/oracle/admin/ora10g/bdump‘

*.compatible=‘10.2.0.1.0‘

*.control_files=‘/u01/app/oracle/oradata/ora10g/control01.ctl‘,‘/u01/app/oracle/oradata/ora10g/control02.ctl‘,‘/u01/app/oracle/oradata/ora10g/control03.ctl‘#Restore Controlfile

*.core_dump_dest=‘/u01/app/oracle/admin/ora10g/cdump‘

*.db_block_size=8192

*.db_cache_size=0

*.db_domain=‘‘

*.db_file_multiblock_read_count=16

*.db_name=‘ora10g‘

*.db_recovery_file_dest=‘/u01/app/oracle/flash_recovery_area‘

*.db_recovery_file_dest_size=2147483648

*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=ora10gXDB)‘

*.java_pool_size=4194304

*.job_queue_processes=10

*.large_pool_size=4194304

*.log_archive_format=‘%t_%s_%r.dbf‘

*.nls_language=‘SIMPLIFIED CHINESE‘

*.nls_territory=‘CHINA‘

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile=‘EXCLUSIVE‘

*.sga_max_size=524288000

*.sga_target=369098752

*.shared_pool_size=0

*.statistics_level=‘TYPICAL‘

*.streams_pool_size=8388608

*.undo_management=‘AUTO‘

*.undo_tablespace=‘UNDOTBS1‘

*.user_dump_dest=‘/u01/app/oracle/admin/ora10g/udump‘

_allow_resetlogs_corruption=true

[email protected]> startup

ORA-01081: cannot start already-running ORACLE - shut it down first

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]> startup pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initora10g.ora

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

[email protected]> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01092: ORACLE instance terminated. Disconnection forced

注意:此处的操作,在11g中,是可以直接用resetlogs方式OPEN数据库的,但是10g还需要做更多的处理

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]> startup

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

ORA-03113: end-of-file on communication channel

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]> startup mount pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initora10g.ora

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

[email protected]> create spfile from pfile;

File created.

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]> startup mount

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

[email protected]> show parameter spfile

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile      string /u01/app/oracle/product/10.2.0

/db_1/dbs/spfileora10g.ora

[email protected]> alter database open;

alter database open

*

ERROR at line 1:

ORA-00603: ORACLE server session terminated by fatal error

--查看此时alert日志,报ora-600错误 [4194]

Wed Jun 24 11:55:14 2015

Errors in file /u01/app/oracle/admin/ora10g/udump/ora10g_ora_4112.trc:

ORA-00600: internal error code, arguments: [4194], [36], [33], [], [], [], [], []

ORA-00600: internal error code, arguments: [4194], [36], [33], [], [], [], [], []

Wed Jun 24 11:55:42 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_smon_4098.trc:

ORA-00600: Message 600 not found; No message file for product=RDBMS, facility=ORA; arguments: [4194] [36] [33]

Wed Jun 24 11:55:44 2015

Fatal internal error happened while SMON was doing active transaction recovery.

Wed Jun 24 11:55:44 2015

Errors in file /u01/app/oracle/admin/ora10g/bdump/ora10g_smon_4098.trc:

ORA-00600: Message 600 not found; No message file for product=RDBMS, facility=ORA; arguments: [4194] [36] [33]

SMON: terminating instance due to error 474

Instance terminated by SMON, pid = 4098

通常ORA-00600 [4194]的错误会跟回滚段错误相关,继续查看trace文件/u01/app/oracle/admin/ora10g/bdump/orcl_smon_4098.trc,看到下述相关信息:

13121D07:00000B4B    15   159 10444  14 Acq rbs SYSTEM

13122395:00000B4C    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 0

131224AB:00000B4D    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 0

13124171:00000B4E    15   159 10444  14 Rec rbs _SYSSMU1$

1312455C:00000B4F    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 1

13131FE0:00000B50    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

13133EDD:00000B59    15   159 10444  14 Rec rbs _SYSSMU2$

13134C80:00000B5A    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 2

13135B8B:00000B5B    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

13136B7A:00000B5F    15   159 10444  14 Rec rbs _SYSSMU3$

13136EA7:00000B60    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 3

13137438:00000B61    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

13138A0D:00000B67    15   159 10444  14 Rec rbs _SYSSMU4$

13138FA8:00000B68    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 4

13139598:00000B69    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

13139B3C:00000B6A    15   159 10444  14 Rec rbs _SYSSMU5$

13139E47:00000B6B    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 5

1313B8FB:00000B71    15   159 10444  14 Rec rbs _SYSSMU6$

1313BE12:00000B72    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 6

1313C276:00000B73    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

1313C536:00000B74    15   159 10444  14 Rec rbs _SYSSMU7$

1313CAEA:00000B75    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 7

1313D804:00000B76    15   159 10444  14 Rec rbs _SYSSMU8$

1313E48F:00000B7C    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 8

1313E9E3:00000B7D    15   159 10005   4 KSL POST SENT postee=6 loc=‘ksasnd‘ id1=0 id2=0 name=   type=0

1313ECF3:00000B7E    15   159 10444  14 Rec rbs _SYSSMU9$

1313F050:00000B7F    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 9

1313F7F2:00000B80    15   159 10444  14 Rec rbs _SYSSMU10$

1313FEED:00000B81    15   159 10444  13 UNDO SEG (BEFORE RECOVERY): usn = 10

[email protected]> select * from v$rollname;

ERROR:

ORA-03114: not connected to ORACLE

[email protected]> conn / as sysdba;

Connected to an idle instance.

[email protected]> startup mount

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

[email protected]> select * from v$rollname;

select * from V$rollname

*

ERROR at line 1:

ORA-01219: database not open: queries allowed on fixed tables/views only

[email protected]> select segment_name from dba_rollback_segs;

select segment_name from dba_rollback_segs

*

ERROR at line 1:

ORA-01219: database not open: queries allowed on fixed tables/views only

此时通过修改pfile参数文件,然后将undo_management=‘AUTO‘改为undo_management=‘MANUAL‘;

并添加隐含参数"_corrupted_rollback_segments",即添加以下内容到pfile文件中:

_corrupted_rollback_segments=‘_SYSSMU1$‘,‘_SYSSMU2$‘,‘_SYSSMU3$‘,‘_SYSSMU4$‘,‘_SYSSMU5$‘,‘_SYSSMU6$‘,‘_SYSSMU7$‘,‘_SYSSMU8$‘,‘_SYSSMU9$‘,‘_SYSSMU10$‘

目的是将undo管理方式改为手动,并标记这10个默认的回滚段为损坏,然后再用该pfile启动数据库

[email protected]> shutdown abort

ORACLE instance shut down.

[email protected]> startup pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initora10g.ora

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

Database opened.

[email protected]>

[email protected]> conn zlm/zlm

Connected.

[email protected]> select count(*) from t1;

COUNT(*)

----------

20

此时数据库已经能够打开,连接到非系统用户zlm,确认新增的10条数据已经丢失

[email protected]> select * from v$rollname;

USN NAME

---------- ------------------------------

0 SYSTEM

[email protected]> select segment_name from dba_rollback_segs;

SEGMENT_NAME

------------------------------

SYSTEM

_SYSSMU1$

_SYSSMU2$

_SYSSMU3$

_SYSSMU4$

_SYSSMU5$

_SYSSMU6$

_SYSSMU7$

_SYSSMU8$

_SYSSMU9$

_SYSSMU10$

11 rows selected.

由于数据库已经正常open,现在回滚段现在已经可以查询到了

还需要将原undo表空间删除并重建,否则还是会有问题,如:非系统用户无法使用系统回滚段

[email protected]> insert into t1 select * from dba_objects where rownum<11;

insert into t1 select * from dba_objects where rownum<11

*

ERROR at line 1:

ORA-01552: cannot use system rollback segment for non-system tablespace ‘ZLM‘

[email protected]> conn / as sysdba

Connected.

[email protected]> insert into zlm.t1 select * from dba_objects where rownum<11;

insert into zlm.t1 select * from dba_objects where rownum<11

*

ERROR at line 1:

ORA-01552: cannot use system rollback segment for non-system tablespace ‘ZLM‘

--重建UNDO表空间(先删除,后创建)

[email protected]> show parameter undo

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management      string
 MANUAL

undo_retention
     integer  900

undo_tablespace      string
 UNDOTBS1

[email protected]> set line 130 pages 130

[email protected]> col file_name for a80

[email protected]> col tablespace_name for a15

[email protected]> select file_name,tablespace_name from dba_data_files;

FILE_NAME
 TABLESPACE_NAME

-------------------------------------------------------------------------------- ---------------

/u01/app/oracle/oradata/ora10g/zlm01.dbf ZLM

/u01/app/oracle/oradata/ora10g/example01.dbf EXAMPLE

/u01/app/oracle/oradata/ora10g/users01.dbf USERS

/u01/app/oracle/oradata/ora10g/sysaux01.dbf SYSAUX

/u01/app/oracle/oradata/ora10g/undotbs01.dbf UNDOTBS1

/u01/app/oracle/oradata/ora10g/system01.dbf SYSTEM

6 rows selected.

[email protected]> drop tablespace undotbs1 including contents and datafiles;

Tablespace dropped.

[email protected]> select file_name,tablespace_name from dba_data_files;

FILE_NAME
 TABLESPACE_NAME

-------------------------------------------------------------------------------- ---------------

/u01/app/oracle/oradata/ora10g/zlm01.dbf ZLM

/u01/app/oracle/oradata/ora10g/example01.dbf EXAMPLE

/u01/app/oracle/oradata/ora10g/users01.dbf USERS

/u01/app/oracle/oradata/ora10g/sysaux01.dbf SYSAUX

/u01/app/oracle/oradata/ora10g/system01.dbf SYSTEM

[email protected]> create undo tablespace undotbs1 datafile ‘/u01/app/oracle/oradata/ora10g/undotbs01.dbf‘ size 50m reuse autoextend on next 10m;

Tablespace created.

--关闭数据库,将pfile中增加的参数去除,并改回undo_management=‘AUTO‘后,用pfile启动数据库

[email protected]> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[email protected]> startup pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initora10g.ora

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

Database opened.

[email protected]> create spfile from pfile;

File created.

[email protected]> show parameter spfile

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile      string

[email protected]> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[email protected]> startup

ORACLE instance started.

Total System Global Area  524288000 bytes

Fixed Size
    1220384 bytes

Variable Size
  327155936 bytes

Database Buffers  192937984 bytes

Redo Buffers
    2973696 bytes

Database mounted.

Database opened.

[email protected]> show parameter spfile

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile      string /u01/app/oracle/product/10.2.0

/db_1/dbs/spfileora10g.ora

[email protected]> conn zlm/zlm

Connected.

[email protected]> select count(*) from t1;

COUNT(*)

----------

20

[email protected]> insert into t1 select * from dba_objects where rownum<11;

10 rows created.

[email protected]> select count(*) from t1;

COUNT(*)

----------

30

[email protected]>

最后用修改完的pfile再创建spfile并启动数据库,非系统用户已经能够使用系统回滚段来进行DML事务操作了

总结:

只要非当前的在线日志文件内容未丢失(开启归档,并正常关闭数据库)的情况下,数据库的数据就不会丢失(当然,归档文件也被删除的例外),非在线的可以通过CLEAR重新创建,在线的只要是正常关闭的,就会被写到归档文件中去,通过RECOVER DATABASE UNTIL CANCEL就可以还原数据,最坏的情况就是current的在线日志在数据库意外关闭的情况下丢失,这种情况丢数据在所难免,如果丢数据的范围是可接受的,那么可以通过设置_allow_resetlogs_corruption=true,就可以强行OPEN数据库,但是会存在一定的问题,11g通过open
resetlogs应该是可以直接OPEN数据库的,打开后要对数据库做一个全备,而10g通过该隐含参数OPEN数据库后,会遭遇到ORA-600 [4194]的错误,需要设置undo_management=manual,并通过隐含参数_corrupted_rollback_segments=‘_SYSSMU1$‘,...,‘_SYSSMU10$‘将系统回滚段设置为损坏,并重建默认的UNDO表空间后,数据库才能OPEN并正常使用,同样地,打开库以后第一件事就是对数据库做一个完备。

时间: 2024-10-28 11:01:45

删除online日志测试及ora-600 [4194]错误的处理的相关文章

删除online日志測试及ora-600 [4194]错误的处理

今天做了一个关于破坏online日志的恢复測试,主要三个场景: 測试1:正常关闭数据库后删除非当前日志 測试2:正常关库后.删除在线日志文件 測试3:非正常关闭数据库.并删除当前在线日志文件 我的測试环境是Oracle 10.2.0.1 32bit的数据库,OS版本号为red hat 5.3,以下看详细測试经过: 測试1:正常关闭数据库后删除非当前日志 [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0

db_recovery_file_dest_size 修改大一点及删除归档日志 |转|

今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的imp导入到高版本数据库中的.一看是导入还很正常,导入到其中某个表的时候,突然就不动 了.一开始我还没有弄明白怎末回事.后来,无意中看到了 计算机管理--事件查看器中 ,有很多报错信息: Archive process error: ORA-16038: log 1 sequ

mysql删除二进制日志文件

一.RESET MASTER 这个语句可以验证首次配置主机备机是否成功.步骤如下: 1. 启动master和 slave,开启replication (即 复制) 注:replication (复制) 也是mysql一个重要的技术 2.运行一些测试的语句看数据是否能够复制到 slave上面 3.当复制运行正常的话,就 stop slace 然后在slave上面执行 reset slave,去掉不需要的数据 4.在master上面执行reset master 去掉2中产生的数据 可以删除列于索引文

通过RMAN删除归档日志不释放问题

我的生产环境中归档日志满了,通过如下脚本删除后,空间并没有释放,看有网友有相关的解决思路,可以跟大家一起分享一下: RMAN> crosscheck archivelog all; RMAN> delete expried archivelog all; 关于rm删除文件空间不释放的问题可以写成一个FAQ了 一般说来不会出现rm掉不释放空间的情况出现这样的情况一般是由于有进程在向文件中写数据或有进程正在访问文件而此时rm文件则会出现不释放空间的情况 理解这样的问题需要理解rm的操作内含一个文件

当ORACLE归档日志满后如何正确删除归档日志

当ORACLE 归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE. 一.首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复. 二.把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的

dataguard主库删除归档日志后从库恢复的方法

------------------方法1在主库上使用备份的进行恢复丢失的归档日志-------------------------1.发现主库备份后删除了归档,但是这些归档从库还没应用,也没有传到从库从库应用的最新的归档日志为592SQL> connect / as sysdbaConnected.SQL> Select Max(t.SEQUENCE#) From V$archived_Log t; MAX(T.SEQUENCE#)---------------- 592 主库的归档日志SQ

delete archivelog all 无法彻底删除归档日志?

最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢? [python] view plain copy print? 1.演示环境 SQL> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.

删除数据库日志文件的方法

原文:删除数据库日志文件的方法 你曾经有在执行SQL的时候,数据库报事务日志已满,然后执行报错.然后纠结于怎么删除数据库日志,捣鼓半天吗,现在就提供两种删除日志文件的方法,希望能够帮到你! 阅读目录 方法一:手工操作 方法二:存储过程代替手工操作 示例存储过程下载 回到顶部 方法一:手工操作   1.数据库->右键->属性->选项-恢复模式->由完成切换成简单   2.数据库->右键->任务->收缩-文件->由完成切换成简单->文件类型->日志-

Oracle 11g正确删除归档日志方法

1.用oracle用户登陆rman RMAN>rman target / 2.列出并确认归档日志路径 RMAN>list archivelog all; 3.删除7天以前的归档日志 RMAN>DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 说明: SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志. 同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全