如何使用 RMAN 重定位或移动 oracle 数据库文件

发布时间 2023-03-28 22:26:57作者: 雪竹子

一、背景

这里的要求是将数据库文件移动或重新定位到其他位置。因此,这里有 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/