今天测试redo log丢失的recover,意外发现,rm redo log后,还可以insert data,checkpoint/swtich logfile,气死我!:
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 19 52428800 512 1 NO CURRENT 1173582 01-SEP-13 2.8147E+14
2 1 17 52428800 512 1 YES INACTIVE 1172946 01-SEP-13 1172953 01-SEP-13
3 1 18 52428800 512 1 YES ACTIVE 1172953 01-SEP-13 1173582 01-SEP-13
SQL>host rm redo02.log
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 19 52428800 512 1 YES ACTIVE 1173582 01-SEP-13 1173590 01-SEP-13
2 1 20 52428800 512 1 NO CURRENT 1173590 01-SEP-13 2.8147E+14
3 1 18 52428800 512 1 YES ACTIVE 1172953 01-SEP-13 1173582 01-SEP-13
SQL> insert into scott.t(txt) values('redo02');
1 row created.
SQL> commit;
Commit complete.
SQL> alter system checkpoint; --料想这会报错的,可人算不如ORACLE算.....
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 19 52428800 512 1 YES INACTIVE 1173582 01-SEP-13 1173590 01-SEP-13
2 1 20 52428800 512 1 NO CURRENT 1173590 01-SEP-13 2.8147E+14
3 1 18 52428800 512 1 YES INACTIVE 1172953 01-SEP-13 1173582 01-SEP-13
后来,狗了很久,不得其解,忽见一文章云:rm并不能真正模拟文件的损坏,请注意这一点.
一刹那,明了,linux下rm文件后,若当前文件已有进程打开,其rm的文件并未真正释放.故oracle下还可以insert data /checkpoint.
继续 switch logfile:
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 21 52428800 512 1 NO CURRENT 1178228 01-SEP-13 2.8147E+14
2 1 20 52428800 512 1 NO ACTIVE 1173590 01-SEP-13 1178228 01-SEP-13
3 1 18 52428800 512 1 YES INACTIVE 1172953 01-SEP-13 1173582 01-SEP-13
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 21 52428800 512 1 NO ACTIVE 1178228 01-SEP-13 1178293 01-SEP-13
2 1 20 52428800 512 1 NO ACTIVE 1173590 01-SEP-13 1178228 01-SEP-13
3 1 22 52428800 512 1 NO CURRENT 1178293 01-SEP-13 2.8147E+14
--当所有Archived的redo log用完后,再switch,就出问题了
--log2一直active未能转到inactive,估计(某人识薄只能估计)该步需再寻址redo2.log,但rm将inode delete无法完成寻址,故hang住了。
SQL> alter system switch logfile;
--这里挂住了,cancel退出
^Calter system switch logfile
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation