如何使用 RMAN 重定位或移动 oracle 数据库文件
一、背景
这里的要求是将数据库文件移动或重新定位到其他位置。因此,这里有 2 种情况,
1. 重新定位所有数据库文件——数据文件、在线重做日志和控制文件(这需要数据库处于挂载模式)
2. 重新定位非系统数据文件——这可以在最小中断的情况下重新定位.
下面的示例使用 /data02/oradata 作为新目标。您可以使用您喜欢的任何目的地,包括新的 ASM 磁盘组。所以对于这个例子,我们有:
现有位置:/data01/oradata
新位置:/data02/oradata
二、重定位所有数据库文件
此解决方案要求数据库处于装载模式。我们将按照下面给出的步骤重新定位所有数据库文件、控制文件和重做日志。
1.以mount模式重启数据库。
首先,我们需要以挂载模式启动数据库才能执行重定位。
SQL> shutdown immediate; SQL> startup mount;
2. Copy all datafiles to the new location
下一步是开始将数据文件复制到新位置。这里有2个案例。
a. 复制不同名称的数据文件(数据库驻留在 OS 文件系统上)
当您指定变量%U时,RMAN 在复制时自动生成新的文件名。
RMAN> backup as copy database format '/data02/oradata/%U';
b. 复制具有相同名称的数据文件
要保持相同的名称,您可以使用db_file_name_convert选项,如下所示:
RMAN> BACKUP AS COPY DB_FILE_NAME_CONVERT ('/data01/oradata/','/data02/oradata/') database;
3. Switch to the datafile copies
切换数据文件副本以便能够从新位置读取它们。
RMAN> switch database to copy;
4. Relocate the online redo logs
由于 RMAN 不备份联机重做日志,因此您需要将它们重新定位到 RMAN 之外
a. 识别联机重做日志列表:
SQL> select * from v$logfile;
b. 将行重做日志的 o/s 副本复制到新位置:
$ cp /data01/oradata/redo01.log /data02/oradata/redo01.log $ cp /data01/oradata/redo02.log /data02/oradata/redo02.log $ cp /data01/oradata/redo03.log /data02/oradata /redo03.log $ cp /data01/oradata/redo04.log /data02/oradata/redo04.log
c. 现在重命名日志文件,对每个重做日志文件执行此操作:
SQL> alter database rename file '/data01/oradata/redo01.log' to '/data02/oradata/redo01.log'; SQL> alter database rename file '/data01/oradata/redo02.log' to '/data02/oradata/redo02.log'; SQL> alter database rename file '/data01/oradata/redo03.log' to '/data02/oradata/redo03.log'; SQL> alter database rename file '/data01/oradata/redo04.log' to '/data02/oradata/redo04.log';
5. Relocate the controlfiles
按照以下步骤重新定位控制文件。
a. 将当前控制文件备份到新位置:
MAN> backup as copy current controlfile format '/data02/oradata/control001.ctl';
b. 复制控制文件副本:
RMAN> backup as copy controlfilecopy '/data02/oradata/control01.ctl' format '/data02/oradata/control02.ctl';
c. 更改控制文件位置:
SQL> startup nomount; SQL> show parameter control
SQL> alter system set control_files='/data02/oradata/control01.ctl','/data02/oradata/control02.ctl' scope=spfile;
6. Start the database
完成上述所有步骤后,您可以继续启动数据库。
SQL> alter database mount; RMAN> recover database; RMAN> alter database open;
7. Relocating TEMP files
如果您需要重新定位 temp,则只需删除并在 SQL*Plus 中重新创建它:
SQL> alter database drop temporary tablespace temp; SQL> create temporary tablespace temp datafile '/data02/oradata/temp01.dbf' size 100m;
三、重新定位一些非系统数据文件
下面提到的步骤可以在数据库打开时完成。您只能对数量较少的非系统数据文件执行此操作。它在重命名期间只需要最少的中断。出于本帖子示例的目的,我们将数据文件 5 重新定位到新位置。
1.备份数据文件到新位置
要重新定位数据文件 5,我们首先要备份数据文件。
RMAN> report schema; RMAN> backup as copy datafile 5 format '/opt/app/oracle/oradata/ORA11G/users01.bk'; RMAN> list copy of datafile 5;
2.使数据文件脱机
使数据文件脱机并使用 SWITCH 命令重命名它:
SQL> alter database datafile 5 offline; RMAN> switch datafile 5 to copy; RMAN> recover datafile 5;
3.在线数据文件
把数据文件上线并确认它的新位置:
SQL> alter database datafile 5 online; RMAN> report schema;
四、附录
https://www.thegeekdiary.com/how-to-relocate-or-move-oracle-database-files-using-rman/
微信赞赏
支付宝赞赏