首页 > Linux操作系统 > Linux操作系统 > 数据库物理结构发生变化后的恢复
测试环境:
系统:LINUX-64
数据库:10.2.0.1 两节点的RAC,ASM存储。
测试条件:在全备份数据库后,增加表空间。该如何恢复?
(1)查看数据文件
SQL> SELECT name FROM V$DATAFILE;
NAME
--------------------------------------------------------------------------------
+RAC_DISK/racdb/datafile/system.259.794232627
+RAC_DISK/racdb/datafile/undotbs1.260.794232647
+RAC_DISK/racdb/datafile/sysaux.261.794232657
+RAC_DISK/racdb/datafile/undotbs2.263.794232675
+RAC_DISK/racdb/datafile/users.264.794232683
(2)做一个完全备份
RMAN> backup database;
(3)备份完成后增加数据文件,表空间。
SQL> create tablespace xhm datafile size 2M;
SQL> ALTER tablespace users add datafile size 2M;
(4)创建数据
SQL> CREATE TABLE TEST tablespace xhm AS SELECT * FROM DBA_USERS ;
SQL> SELECT * FROM SYS.TEST;
SQL> SELECT * FROM user_segments WHERE segment_name='TEST';
(5)关闭数据库,删除文件
ASMCMD> rm USERS.302.795003773
ASMCMD> rm XHM.301.795003661
ASMCMD> pwd
+rac_disk/racdb/datafile
(6)启动数据库
SQL> startup
ORACLE instance started.
Total System Global Area 184549376 bytes
Fixed Size 2019448 bytes
Variable Size 142610312 bytes
Database Buffers 37748736 bytes
Redo Buffers 2170880 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '+RAC_DISK/racdb/datafile/xhm.301.795003661'
(7)恢复数据库
由于备份的时候还没创建数据文件,所以恢复前需重建数据文件。不需要制定大小,属性在控制文件中都有记录。
SQL> alter database create datafile 7;
Database altered.
SQL> alter database create datafile '+RAC_DISK/racdb/datafile/xhm.301.795003661';
Database altered.
SQL> recover datafile 6;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 6: '+RAC_DISK/racdb/datafile/xhm.301.795003661'
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '+RAC_DISK/racdb/datafile/xhm.301.795003661'
由于使用的ASM,新建的文件名会和之前的不一样,具体指定也没用。故需要重命名数据文件。也就是修改控制文件。
SQL> alter database rename file '+RAC_DISK/racdb/datafile/xhm.301.795003661' to '+rac_disk/racdb/datafile/XHM.302.795004969';
SQL> alter database rename file '+rac_disk/racdb/datafile/users.302.795003773' to '+rac_disk/racdb/datafile/USERS.301.795004951';
(8)再次恢复
SQL> recover datafile 6;
Media recovery complete.
SQL> recover datafile 7;
Media recovery complete.
SQL> alter database open;
Database altered.
(9)检查数据
select * from sys.test;
select * from user_segments where segment_name='TEST';
select * from v$datafile;
注:参考大话ORACLE
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26655292/viewspace-745052/ ,如需转载,请注明出处,否则将追究法律责任。