--接着rman的做 在rman恢复时,数据库是mount状态的,这里需要将数据打开!
ORCL>conn system/yang[@]orcl as sysdba
已连接。
ORCL>alter database open;
数据库已更改。
--将日志文件迁移到ASM 磁盘组中。在ASM中建立3组新的redo log
ORCL>alter database add logfile group 4 '+SYS_DATA/redo04.log' size 50m;
数据库已更改。
ORCL>alter database add logfile group 5 '+SYS_DATA/redo05.log' size 50m;
数据库已更改。
ORCL>alter database add logfile group 6 '+SYS_DATA/redo06.log' size 50m;
数据库已更改。
---查看源数据库的redo log的状态,要将group 1 2 3全部归档并替换为上一步建立的log
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 CURRENT
3 INACTIVE
4 UNUSED
5 UNUSED
6 UNUSED
已选择6行。
ORCL>alter system switch logfile;
系统已更改。
ORCL>alter system switch logfile;
系统已更改。
ORCL>alter system switch logfile;
系统已更改。
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 ACTIVE
3 INACTIVE
4 ACTIVE
5 ACTIVE
6 CURRENT
已选择6行。
---手工使数据库产生检查点,让lgwr 写redo到磁盘!
ORCL>alter system checkpoint;
系统已更改。
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 INACTIVE
4 INACTIVE
5 INACTIVE
6 CURRENT
已选择6行。
---删掉不用的redo log
ORCL>alter database drop logfile group 1;
数据库已更改。
ORCL>alter database drop logfile group 2;
数据库已更改。
ORCL>alter database drop logfile group 3;
数据库已更改。
---迁移时,rman没有把临时表空间迁移到ASM中,所以,向ASM中迁移TEMPFILE
ORCL>select file_name,tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
--------------------------------- ---------------
F:\ORACL\ORADATA\ORCL\TEMP01.DBF TEMP
ORCL>alter tablespace temp add tempfile '+SYS_DATA';
表空间已更改。
ORCL>select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+SYS_DATA/redo04.log
+SYS_DATA/redo05.log
+SYS_DATA/redo06.log ---这里没有考虑到分散日志分布的问题,实际应用中,要考虑的!
ORCL>select file_name,tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
------------------------------ ---------------
+SYS_DATA/orcl/tempfile/temp.265.727923505 TEMP F:\ORACL\ORADATA\ORCL\TEMP01.DBF TEMP
ORCL>alter tablespace temp drop tempfile 'F:\ORACL\oradata\orcl\temp01.dbf';
表空间已更改。
--修改db_create_file_dest,db_recovery_file_dest,db_recovery_file_dest_size 的值!
ORCL>alter system set db_create_file_dest='+SYS_DATA\ORCL\ORADATA' scope=spfile;
系统已更改。
ORCL>alter system set db_recovery_file_dest='+FLASH_DATA' scope=spfile;
系统已更改。
ORCL>alter system set db_recovery_file_dest_size=1 G scope=spfile;
系统已更改。
再次向ASM磁盘中添加控制文件!(迁移时,只有一个控制文件)
ORCL>alter database backup controlfile to '+SYS_DATA\ORCL\ORADATA';
alter database backup controlfile to '+SYS_DATA\ORCL\ORADATA'
*
第 1 行出现错误:
ORA-01580: 创建控制备份文件 +SYS_DATA\ORCL\ORADATA 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +SYS_DATA\ORCL\ORADATA
ORA-15005: name "ORCL/ORADATA" is already used by an existing alias
---当指定磁盘组的具体目录时,会报错!所以直接指定磁盘组就好了!
ORCL>alter database backup controlfile to '+SYS_DATA';
数据库已更改。
ORCL>show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string +SYS_DATA/orcl/oradata/control
01.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
---修改参数文件中
ORCL>alter system set control_files='+SYS_DATA/ORCL/ORADATA/CONTROL01.CTL','+SYS_DATA/ORCL/ORADATA/CONTROL02.CTL' scope= spfile;
系统已更改。
ORCL>create pfile ='f:\asm_pfile.txt' from spfile;
文件已创建。
ORCL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
----------------------- 备注 ----------------------------------
网上也有其他方法的,中间对于迁移日志和temp 文件的方法不太一样!
--迁移redo log
通过SQL*Plus连入数据库实例,将控制文件里记录的联机日志文件的路径修改为磁盘组SYS_DATA。
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo01.log' to '+SYS_DATA';
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo02.log' to '+SYS_DATA';
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo03.log' to '+SYS_DATA';
--迁移tempfile 通过rman 手工迁移!
RMAN> run{
2> switch tempfile 1 to '+SYS_DATA';
3> }
ORCL>conn system/yang[@]orcl as sysdba
已连接。
ORCL>alter database open;
数据库已更改。
--将日志文件迁移到ASM 磁盘组中。在ASM中建立3组新的redo log
ORCL>alter database add logfile group 4 '+SYS_DATA/redo04.log' size 50m;
数据库已更改。
ORCL>alter database add logfile group 5 '+SYS_DATA/redo05.log' size 50m;
数据库已更改。
ORCL>alter database add logfile group 6 '+SYS_DATA/redo06.log' size 50m;
数据库已更改。
---查看源数据库的redo log的状态,要将group 1 2 3全部归档并替换为上一步建立的log
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 CURRENT
3 INACTIVE
4 UNUSED
5 UNUSED
6 UNUSED
已选择6行。
ORCL>alter system switch logfile;
系统已更改。
ORCL>alter system switch logfile;
系统已更改。
ORCL>alter system switch logfile;
系统已更改。
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 ACTIVE
3 INACTIVE
4 ACTIVE
5 ACTIVE
6 CURRENT
已选择6行。
---手工使数据库产生检查点,让lgwr 写redo到磁盘!
ORCL>alter system checkpoint;
系统已更改。
ORCL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 INACTIVE
4 INACTIVE
5 INACTIVE
6 CURRENT
已选择6行。
---删掉不用的redo log
ORCL>alter database drop logfile group 1;
数据库已更改。
ORCL>alter database drop logfile group 2;
数据库已更改。
ORCL>alter database drop logfile group 3;
数据库已更改。
---迁移时,rman没有把临时表空间迁移到ASM中,所以,向ASM中迁移TEMPFILE
ORCL>select file_name,tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
--------------------------------- ---------------
F:\ORACL\ORADATA\ORCL\TEMP01.DBF TEMP
ORCL>alter tablespace temp add tempfile '+SYS_DATA';
表空间已更改。
ORCL>select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+SYS_DATA/redo04.log
+SYS_DATA/redo05.log
+SYS_DATA/redo06.log ---这里没有考虑到分散日志分布的问题,实际应用中,要考虑的!
ORCL>select file_name,tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
------------------------------ ---------------
+SYS_DATA/orcl/tempfile/temp.265.727923505 TEMP F:\ORACL\ORADATA\ORCL\TEMP01.DBF TEMP
ORCL>alter tablespace temp drop tempfile 'F:\ORACL\oradata\orcl\temp01.dbf';
表空间已更改。
--修改db_create_file_dest,db_recovery_file_dest,db_recovery_file_dest_size 的值!
ORCL>alter system set db_create_file_dest='+SYS_DATA\ORCL\ORADATA' scope=spfile;
系统已更改。
ORCL>alter system set db_recovery_file_dest='+FLASH_DATA' scope=spfile;
系统已更改。
ORCL>alter system set db_recovery_file_dest_size=1 G scope=spfile;
系统已更改。
再次向ASM磁盘中添加控制文件!(迁移时,只有一个控制文件)
ORCL>alter database backup controlfile to '+SYS_DATA\ORCL\ORADATA';
alter database backup controlfile to '+SYS_DATA\ORCL\ORADATA'
*
第 1 行出现错误:
ORA-01580: 创建控制备份文件 +SYS_DATA\ORCL\ORADATA 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +SYS_DATA\ORCL\ORADATA
ORA-15005: name "ORCL/ORADATA" is already used by an existing alias
---当指定磁盘组的具体目录时,会报错!所以直接指定磁盘组就好了!
ORCL>alter database backup controlfile to '+SYS_DATA';
数据库已更改。
ORCL>show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string +SYS_DATA/orcl/oradata/control
01.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
---修改参数文件中
ORCL>alter system set control_files='+SYS_DATA/ORCL/ORADATA/CONTROL01.CTL','+SYS_DATA/ORCL/ORADATA/CONTROL02.CTL' scope= spfile;
系统已更改。
ORCL>create pfile ='f:\asm_pfile.txt' from spfile;
文件已创建。
ORCL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
----------------------- 备注 ----------------------------------
网上也有其他方法的,中间对于迁移日志和temp 文件的方法不太一样!
--迁移redo log
通过SQL*Plus连入数据库实例,将控制文件里记录的联机日志文件的路径修改为磁盘组SYS_DATA。
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo01.log' to '+SYS_DATA';
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo02.log' to '+SYS_DATA';
SQL> alter database rename file 'F:\ORACL\ORADATA\ORCL\redo03.log' to '+SYS_DATA';
--迁移tempfile 通过rman 手工迁移!
RMAN> run{
2> switch tempfile 1 to '+SYS_DATA';
3> }