ARCHIVELOGモードでのユーザー管理の完全なリカバリ(3)——開いているデータベースをリカバリし、データベースは最初に開いています!
思い出すとuser 1ユーザーのtestテーブルには2つの記録があります
SQL> show user
USER "USER1"
SQL> select * from test;
ID VALUE
---------- --------------------
1 a
2 b
さらにtestテーブルに3番目のデータを挿入します.
SQL> insert into test values(3,'c');
1 。
SQL> commit;
。
SQL> select * from test;
ID VALUE
---------- --------------------
1 a
2 b
3 c
その後、ログを手動で切り替えます.ttb 1という表領域のデータファイルを削除し、リカバリテーブルにリカバリするレコードがないかを確認します.oracleはまだデータファイルが失われていることに気づいていないことを示しています.testテーブルをクエリーし続けるのが正常なときは、テーブルtestにデータを挿入してもいいです.データはメモリに置いてあるので、データファイルの上に書いていません.
SQL> conn /as sysdba
。
SQL> alter system archive log current;
。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/ttb1.dbf
SQL> select * from v$recover_file;
SQL> conn user1/user1
。
SQL> insert into test values(4,'d');
1 。
SQL> commit;
。
SQL> select * from test;
ID VALUE
---------- --------------------
1 a
2 b
3 c
4 d
このとき手動でCKPTが発生します.alertログファイルにエラーメッセージが記録されていることがわかります.リカバリテーブルを表示すると、リカバリが必要なデータファイルが表示されます.v$recover_の場合fileにはリカバリするデータファイルが記録されていません.shutdown immediateをクリックすると、何番かのファイルがリカバリされる必要があります.リカバリ操作を開始することもできます.
SQL> conn /as sysdba
。
SQL> alter system checkpoint;
。
SQL> select * from v$recover_file;
SQL> shutdown immediate
ORA-01116: 14
ORA-01110: 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
ORA-27041:
Linux Error: 2: No such file or directory
Additional information: 3
SQL> select status from v$instance;
STATUS
------------
OPEN
リカバリ
SQL> ! cp /u01/app/oracle/backup/ttb1.dbf /u01/app/oracle/oradata/orcl/
SQL> recover datafile 14;
ORA-00283:
ORA-01124: 14 -
ORA-01110: 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
SQL> alter database datafile 14 offline;
。
SQL> recover datafile 14;
ORA-00279: 1004104 ( 10/08/2011 08:29:53 ) 1
ORA-00289: : /u01/app/oracle/archivelog/1_70_761792499.dbf
ORA-00280: 1004104 ( 1) #70
: {<RET>=suggested | filename | AUTO | CANCEL}
auto
。
。
SQL> alter database datafile 14 online;
。
SQL> shutdown immediate
。
。
ORACLE 。
SQL> startup
ORACLE 。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 117443880 bytes
Database Buffers 46137344 bytes
Redo Buffers 2924544 bytes
。
。
SQL> conn user1/user1
。
SQL> select * from test;
ID VALUE
---------- --------------------
1 a
2 b
3 c
4 d