使用RMAN执行Oracle ASM数据迁移

Performing Oracle ASM Data Migration with RMAN

官网关于RMAN ASM数据迁移的介绍

https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/asm-migration-rman.html#GUID-4DCA6235-83FE-4EE0-9080-73558D7FF06D

官网关于RMAN ASM数据迁移的介绍

使用RMAN执行Oracle ASM数据迁移

恢复管理器(RMAN)提供了将数据迁移到ASM和从ASM迁移数据的工具。

本章描述了如何使用Recovery Manager (RMAN)将数据迁移到Oracle自动存储管理(Oracle ASM)存储中或从存储中迁移出来。

本章包括以下主题:

ASM数据迁移概述

准备使用RMAN将数据库迁移到Oracle ASM

使用RMAN将数据库迁移到Oracle ASM

将数据库从ASM迁移到可选存储

使用RMAN在ASM磁盘组之间移动数据文件

本章的过程涵盖了Linux平台上的Oracle ASM独立环境。对于不同的Oracle配置和其他操作系统平台,文件位置和过程可能不同。

Purpose of Oracle ASM Data Migration

ASM数据迁移的目的

ASM存储的备选方案包括文件系统、原始磁盘和SAN配置。与这些存储选择相比,ASM有很多优点,包括性能优化、冗余保护和负载平衡。您不需要第三方逻辑卷管理器,因为ASM为您管理磁盘。Oracle Real Application Clusters (Oracle RAC)数据库得益于Oracle ASM,因为它提供了现成的共享存储。

如果数据库当前使用的存储系统不是Oracle ASM,那么可以将数据库的全部或部分迁移到Oracle ASM中,从而简化数据库管理。您还可以将快速恢复区域迁移到Oracle ASM。

本机操作系统命令(如Linux cp或Windows COPY)无法在ASM存储中读写文件。由于RMAN可以读写ASM文件,所以可以使用RMAN将数据文件复制到ASM存储中或从ASM磁盘组之间复制。如果必须将备份存储在用户管理的磁盘上,则此技术非常有用。

Basic Concepts of Oracle ASM Data Migration

ASM数据迁移的基本概念

即使不使用RMAN作为主要备份工具,也可以使用RMAN将数据迁移到Oracle ASM。迁移需要一个RMAN数据库备份。

如果在ASM和其他存储系统中都有足够的磁盘空间容纳整个数据库,那么可以直接将数据库移动到ASM中。如果没有足够的存储空间,那么可以将数据库备份到磁带上,创建一个使用旧磁盘空间的Oracle ASM磁盘组,并将数据库从磁带恢复到Oracle ASM。

设置新恢复区域的位置后,现有备份将保留在旧恢复区域中,并根据恢复区域的总磁盘配额计数。当需要空间时,将从旧的恢复区域删除备份。RMAN可以使用这些备份。除非需要磁盘空间,否则没有必要将遗留备份移动到新的ASM恢复区域。为了释放旧恢复区域中文件所消耗的空间,您可以将它们备份到磁带上,或者将它们迁移到Oracle ASM恢复区域。

  注意:外存档重做日志是LogMiner会话的逻辑备用数据库接收到的日志。无法迁移外部存档的重做日志。与普通归档日志不同,外部归档日志具有不同的内部数据库标识符(DBID)。因此,无法在逻辑备用数据库上备份或恢复它们。

将数据库从Oracle ASM迁移到可选存储系统类似于从可选存储系统迁移到Oracle ASM。主要的更改是修改每个步骤以引用替代存储系统中的文件位置。

u can migrate data to Oracle ASM with RMAN even if you are not using RMAN as your primary backup tool. The migration requires one RMAN database backup.

If you have sufficient disk space to hold the entire database both in Oracle ASM and alternative storage systems, then you can move a database directly into Oracle ASM. If you do not have sufficient storage, then you can back the database up to tape, create an Oracle ASM disk group that uses old disk space, and restore the database from tape to Oracle ASM.

After you set the location of the new recovery area, existing backups remain in the old recovery area and count against the total disk quota of the recovery area. The backups are deleted from the old recovery area when space is needed. These backups are usable by RMAN. It is not necessary to move legacy backups to the new Oracle ASM recovery area unless you need disk space. To free space consumed by files in the old recovery area, you can back them up to tape or migrate them to the Oracle ASM recovery area.

Note:

A foreign archived redo log is a log received by a logical standby database for a LogMiner session. Foreign archived redo logs cannot be migrated. Unlike normal archived logs, foreign archived logs have a different internal database identifier (DBID). For this reason, they cannot be backed up or restored on a logical standby database.

Migrating a database from Oracle ASM to an alternative storage system is similar to migration from an alternative storage system to Oracle ASM. The primary change is to modify each step to refer to file locations in the alternative storage system.

Basic Steps of Data Migration to Oracle ASM Using RMAN

使用RMAN将数据迁移到ASM的基本步骤

本节讨论使用RMAN将整个数据库和快速恢复区域从可选存储迁移到Oracle ASM的过程。

快速恢复区是一个可选的磁盘位置,您可以使用它来存储与恢复相关的文件,如控制文件和联机重做日志副本、归档重做日志文件、闪回日志和RMAN备份。Oracle数据库和RMAN自动管理快速恢复区域中的文件。可以指定磁盘配额,这是用户指定的快速恢复区域的最大大小。当达到磁盘配额时,Oracle会自动删除不再需要的文件。

 

闪回日志是oracle生成的日志,用于执行闪回数据库操作。数据库只能将闪回日志写入快速恢复区域。闪回日志是按顺序写入的,没有存档。它们不能备份到磁盘。

要将整个数据库和快速恢复区域从可选存储迁移到Oracle ASM,请执行以下步骤:

1 备份数据库和服务器参数文件,并禁用Oracle Flashback数据库。

Oracle Flashback Database选项使用RMAN或SQL中的Flashback数据库命令将整个数据库返回到先前一致的系统更改号(SCN)。数据库闪回与传统的媒体恢复不同,因为它不涉及物理文件的恢复,而是使用已更改数据块的保存图像将当前数据文件恢复到过去的状态。该特性使用闪回日志和归档重做日志。

 

此步骤在准备使用RMAN将数据库迁移到Oracle ASM时进行了描述。

2 将文件恢复到Oracle ASM,恢复数据库,可选择将快速恢复区域迁移到Oracle ASM。

此步骤在使用RMAN将数据库迁移到Oracle ASM中进行了描述。

要将文件从Oracle ASM迁移到可选存储,请参阅将数据库从Oracle ASM迁移到可选存储。

To migrate the entire database and fast recovery area from alternative storage to Oracle ASM, perform the following steps:

  1. Back up the database and server parameter file, and disable Oracle Flashback Database.

    The Oracle Flashback Database option returns the entire database to a prior consistent System Change Number (SCN) with the FLASHBACK DATABASE command in RMAN or SQL. A database flashback is different from traditional media recovery because it does not involve the restore of physical files, instead restoring your current data files to past states using saved images of changed data blocks. This feature uses flashback logs and archived redo logs.

    This step is described in Preparing to Migrate the Database to Oracle ASM Using RMAN.

  2. Restore files to Oracle ASM, recover the database, and optionally migrate the fast recovery area to Oracle ASM.

    This step is described in Migrating the Database to Oracle ASM Using RMAN.

Preparing to Migrate the Database to Oracle ASM Using RMAN

准备使用RMAN将数据库迁移到Oracle ASM

本节解释如何为迁移准备数据库。本节做出以下假设:

您希望将数据库迁移到两个Oracle ASM磁盘组:数据库的+DATA和快速恢复区域的+FRA。

要迁移到ASM存储的数据库名为mydb。

准备Oracle ASM迁移数据库:

1 如果数据库的COMPATIBLE初始化参数设置小于11.0.0,则将任何只读可传输表空间设置为读/写。

只读可传输表空间无法迁移,因为RMAN无法对它们进行备份。

 

2 如果数据库是物理备用数据库,并且启动了托管恢复,则停止托管恢复。

物理备用数据库是可用于灾难保护的生产数据库的副本。

例如,使用SYSBACKUP特权(而不是SYSDBA特权)将SQL*Plus连接到数据库,以强制隔离职责安全模型,并运行以下语句来停止托管恢复:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

保持终端窗口打开。

3 将服务器参数文件或初始化参数文件复制到临时位置。

下面的示例使用操作系统实用程序复制服务器参数文件:

$ cp spfileMYDB.ora orig_spfileMYDB.ora

4 在一个新的终端窗口中,启动RMAN会话并作为目标连接到要迁移的数据库。可以选择连接到恢复目录。连接SYSBACKUP特权以强制分离职责安全模型。

 

5 将数据文件备份到ASM磁盘组。

 

下面的示例使用RUN命令进行0级增量备份,并分配四个通道以提高备份速度。0级增量备份是一种RMAN增量备份,它备份正在备份的数据文件中的所有数据块。0级的增量备份在内容上与完全备份相同,但与完全备份不同的是,0级备份被认为是增量备份策略的一部分。

 

增量备份是一种RMAN备份,其中只备份修改过的块。增量备份按级别分类。级别0的增量备份执行与完全备份相同的功能,因为它们都备份了曾经使用过的所有块。不同之处在于,完全备份不影响由后续增量备份备份的块,而增量备份影响由后续增量备份备份的块。

 

完整备份是一种非增量的RMAN备份。Full不是指备份了多少数据库,而是指备份不是增量的。因此,您可以对一个数据文件进行完全备份。

相应地增加或减少这个数字。format子句指定+DATA,它是用于存储数据库的ASM磁盘组的名称。

Increase or decrease this number accordingly. The format clause specifies +DATA, which is the name of the Oracle ASM disk group to be used for storing the database.

RUN
{
     ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
     ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
     ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
     ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
     BACKUP AS COPY
            INCREMENTAL LEVEL 0
            DATABASE
            FORMAT '+DATA'
            TAG 'ORA_ASM_MIGRATION';
}

6  如果数据库启用了块更改跟踪,则可以选择进行第1级增量备份,以便稍后使用该备份恢复数据库副本。

块更改跟踪是一个数据库选项,它使Oracle跟踪受每个数据库更新影响的数据文件块。跟踪信息存储在块更改跟踪文件中。当启用了块更改跟踪时,RMAN使用来自更改跟踪文件的更改块的记录来提高增量备份性能,方法是只读取已知已更改的块,而不是全部读取数据文件。

下面的例子是在上一步中创建的0级备份的1级增量副本:

RUN
{
        ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
        BACKUP INCREMENTAL LEVEL 1
            FOR RECOVER OF COPY WITH TAG 'ORA_ASM_MIGRATION'
            DATABASE;
}

7 If the database is in ARCHIVELOG mode, and if the database is open, then archive the online logs.

The following example uses the SQL command to archive the current redo logs:

RMAN> SQL "ALTER SYSTEM ARCHIVE LOG CURRENT";

8 If the database instance is currently using a server parameter file, then back it up.

The following example backs up the server parameter file:

RMAN> BACKUP AS BACKUPSET SPFILE;

9  If block change tracking is enabled, then disable it.

The following command disables block change tracking:

RMAN> SQL "ALTER DATABASE DISABLE BLOCK CHANGE TRACKING";

10 If Flashback Database is enabled, then disable it and drop any guaranteed restore points.

如果启用了Flashback数据库,那么禁用它并删除任何有保证的恢复点。

Note:

If you are not migrating the fast recovery area, then skip this step.

禁用Oracle Flashback数据库是必要的,因为您不能将Flashback日志迁移到Oracle ASM。以下命令禁用Flashback数据库:

RMAN> SQL "ALTER DATABASE FLASHBACK OFF";

下面的命令删除名为Q106的保证恢复点:

The following command drops the guaranteed restore point named Q106:

RMAN> SQL "DROP RESTORE POINT Q106";

Shut down the database consistently.

The following command shuts down the database:

一致地关闭数据库。 

以下命令关闭数据库:

RMAN> SHUTDOWN IMMEDIATE;

Migrating the Database to Oracle ASM Using RMAN

使用RMAN将数据库迁移到Oracle ASM

下面的过程旨在最小化数据库停机时间。根据迁移的是主数据库还是备用数据库,步骤略有不同。在准备使用RMAN将数据库迁移到Oracle ASM时,该过程也做了相同的假设。如果您没有将恢复区域迁移到Oracle ASM,那么您必须修改一些步骤。

注意:下面的过程在SQL*Plus和RMAN之间切换,因此要为每个实用程序打开一个终端窗口。

 

要将数据库迁移到Oracle ASM:

 1 按照以下步骤

https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/asm-migration-rman.html#GUID-4DCA6235-83FE-4EE0-9080-73558D7FF06D

准备使用RMAN将数据库迁移到Oracle ASM。

2 在ASM存储中恢复或创建服务器参数文件。

 步骤取决于数据库是否使用服务器参数文件:

如果数据库使用服务器参数文件,那么使用以下命令将其恢复到Oracle ASM磁盘组,其中sid是实例的sid:

RMAN> STARTUP MOUNT;
RMAN> RESTORE SPFILE TO '+DATA/spfilesid.ora';
RMAN> SHUTDOWN IMMEDIATE;

如果数据库没有使用服务器参数文件,那么在Oracle ASM中创建一个。在SQL*Plus中运行CREATE SPFILE命令,如下所示,其中sid是数据库的sid:

SQL>CREATE SPFILE='+DATA/spfilesid.ora' FROM PFILE='?/dbs/initsid.ora';

3 将Oracle托管文件初始化参数设置为Oracle ASM位置。

注意:如果您没有迁移快速恢复区域,那么不要更改DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE初始化参数设置。但是,必须将DB_CREATE_ONLINE_LOG_DEST_n参数设置为Oracle ASM位置,以便迁移在线重做日志。

将DB_CREATE_FILE_DEST和可选的DB_CREATE_ONLINE_LOG_DEST_n初始化参数设置为ASM磁盘组。如果数据库使用恢复区域,则将恢复区域位置更改为Oracle ASM磁盘组。另外,更改恢复区域的大小。

在SQL*Plus中运行命令,如下面的示例所示。该示例假设快速恢复区域的大小为100 GB,并为快速恢复区域指定磁盘组+FRA。

SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='+DATA' SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+DATA',SID='*';

4  将CONTROL_FILES初始化参数设置为Oracle ASM位置。

如果您正在迁移快速恢复区域,那么在SQL*Plus中输入以下命令来重新启动数据库实例,并将控制文件位置设置为磁盘组+DATA和+FRA:

SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA'.'+FRA' SCOPE=SPFILE 
            SID='*';     

如果您没有迁移快速恢复区域,那么在SQL*Plus中输入以下命令来重新启动数据库实例,并将控制文件位置设置为disk group +DATA:

SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+DATA' SCOPE=SPFILE
            SID='*';

5 将控制文件迁移到Oracle ASM并挂载控制文件。

切换到RMAN终端以恢复控制文件。在下面的例子中,original_cf_name是在迁移之前的初始化参数文件中的一个控制文件名:

RMAN> STARTUP FORCE NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM 'original_cf_name';
RMAN> ALTER DATABASE MOUNT;

6 将数据文件迁移到Oracle ASM。

使用RMAN切换到在步骤“将数据文件备份到Oracle ASM磁盘组”中创建的数据库副本,准备使用RMAN将数据库迁移到Oracle ASM。switch将所有数据文件重命名为Oracle ASM磁盘组上的文件。然后,恢复数据库。如果采取了增量备份,那么RMAN将在恢复期间应用它们。例如,在RMAN提示符中输入以下命令:

Migrate the data files to Oracle ASM.

Use RMAN to switch to the database copy that you created in step "Back up the data files to the Oracle ASM disk group" in Preparing to Migrate the Database to Oracle ASM Using RMAN. The switch renames all the data files to files on Oracle ASM disk groups. Afterward, recover the database. If incremental backups were taken, then RMAN applies them during recovery. For example, enter the following commands at the RMAN prompt:

SWITCH DATABASE TO COPY;
RUN
{
    ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
    ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
    ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
    RECOVER DATABASE;
}

7  如果数据库使用块更改跟踪或闪回数据库,则启用这些特性。

注意:如果您没有迁移恢复区域,那么您不会启用Flashback数据库,除非您以前禁用过它。

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';
SQL> ALTER DATABASE FLASHBACK ON;

8 将数据库置于正常操作模式 

正常的操作模式取决于数据库是主数据库还是备用数据库:

  • If the database is a primary database, then open it as follows:

    SQL> ALTER DATABASE OPEN;
  • If the database is a standby database, then resume managed recovery mode as follows:

  • 如果数据库是备用数据库,则按照如下方式恢复托管恢复模式:

  • SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE

9 删除tempfiles并在Oracle ASM中重新创建它们。

使用SQL*Plus重新创建tempfiles。在下面的示例中,原始存储中的tempfile的名称是tempfile_name。临时表空间的名称是temp_tbs_name。

SQL> ALTER DATABASE TEMPFILE 'tempfile_name' DROP;
SQL> ALTER TABLESPACE temp_tbs_name ADD TEMPFILE;

10 迁移在线重做日志文件。

如果这是一个主数据库,那么在Oracle ASM中添加新的日志组成员并删除旧的成员。可以使用以下PL/SQL脚本将联机重做日志组迁移到Oracle ASM磁盘组中。PL/SQL脚本假设在使用RMAN将数据库迁移到Oracle ASM时,步骤“将Oracle托管文件初始化参数设置为Oracle ASM位置”中指定的Oracle托管文件初始化参数已经设置。

 

11 可选择将旧的快速恢复区域中的备份和副本迁移到Oracle ASM,如下:

a. 如果恢复区域中存在外部归档日志,则不能将它们迁移到Oracle ASM。在RMAN提示符下运行以下命令:

RMAN> DELETE ARCHIVELOG ALL;

b. Back up archived redo log files, backup sets, and data file copies to Oracle ASM. For example, run the following command at the RMAN prompt:

RUN
{ 
        ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
        ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;    

        BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;
        BACKUP BACKUPSET ALL DELETE INPUT;
        BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;
}

Example Migrating the online redo logs

SET SERVEROUTPUT ON;
DECLARE
   CURSOR rlc IS
      SELECT GROUP# GRP, THREAD# THR, BYTES, 'NO' SRL
      FROM   V$LOG
      UNION
      SELECT GROUP# GRP, THREAD# THR, BYTES, 'YES' SRL
      FROM   V$STANDBY_LOG
      ORDER BY 1;
   stmt     VARCHAR2(2048);
BEGIN
   FOR rlcRec IN rlc LOOP
      IF (rlcRec.srl = 'YES') THEN
         stmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' ||
                 rlcRec.thr || ' SIZE ' || rlcRec.bytes;
         EXECUTE IMMEDIATE stmt;
         stmt := 'ALTER DATABASE DROP STANDBY LOGFILE GROUP ' || rlcRec.grp;
         EXECUTE IMMEDIATE stmt;
      ELSE
         stmt := 'ALTER DATABASE ADD LOGFILE THREAD ' ||
                 rlcRec.thr || ' SIZE ' ||  rlcRec.bytes;
         EXECUTE IMMEDIATE stmt;
         BEGIN
            stmt := 'ALTER DATABASE DROP LOGFILE GROUP ' || rlcRec.grp;
            DBMS_OUTPUT.PUT_LINE(stmt);
            EXECUTE IMMEDIATE stmt;
         EXCEPTION
            WHEN OTHERS THEN
               EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE';
               EXECUTE IMMEDIATE 'ALTER SYSTEM CHECKPOINT GLOBAL';
               EXECUTE IMMEDIATE stmt;
         END;
      END IF;
   END LOOP;
END;
/

Migrating a Database from Oracle ASM to Alternative Storage

将数据库从ASM迁移到可选存储

将数据库从Oracle ASM迁移到另一个存储系统本质上与迁移到Oracle ASM是相反的。修改准备使用RMAN将数据库迁移到Oracle ASM和使用RMAN将数据库迁移到Oracle ASM的步骤如下:

如果过程指定了Oracle托管文件的位置,则更改过程以使用备用存储中的位置。

如果BACKUP命令的FORMAT子句指定了Oracle ASM位置,则将备份格式更改为备用存储位置。

如果SQL语句中使用的文件名是Oracle ASM位置,则将其更改为另一个存储位置中的文件名。

Moving Data Files Between Oracle ASM Disk Groups Using RMAN

您可能希望将ARCHIVELOG模式数据库中的活动数据文件从一个ASM磁盘组移动到另一个ASM磁盘组。可以使用RMAN BACKUP作为COPY将数据文件复制到新的磁盘组,并设置NEWNAME和SWITCH命令来重命名控制文件中的数据文件。

您还可以使用ALTER DATABASE MOVE DATAFILE。移动数据文件的SQL语句。有关使用ALTER DATABASE MOVE DATAFILE在线移动数据文件的信息,请参阅使用ALTER DATABASE在磁盘组之间移动数据文件。

对于使用RMAN的这个场景,假设您正在使用磁盘组+DATA和+USERDATA,并且希望将数据文件users.261.689589837移动到磁盘组USERDATA。在开始移动数据文件的过程之前,确保数据库启用了ARCHIVELOG模式。

要使用带有SET NEWNAME和SWITCH命令的RMAN BACKUP AS COPY备份复制过程将数据文件从一个ASM磁盘组移动到另一个磁盘组,请执行以下步骤。

Moving Data Files Between Oracle ASM Disk Groups Using RMAN

You may want to move an active data file in an ARCHIVELOG mode database from one Oracle ASM disk group to another. You can use RMAN BACKUP AS COPY to copy the data file to the new disk group and SET NEWNAME and SWITCH commands to rename the data file in the control file.

You can also use the ALTER DATABASE MOVE DATAFILE. SQL statement to move data files. For information about moving data files online with ALTER DATABASE MOVE DATAFILE, refer to Moving Data Files Between Disk Groups With ALTER DATABASE.

For this scenario using RMAN, assume that you are using disk groups DATA and USERDATA and you want to move the data file users.261.689589837 to disk group USERDATA. Ensure that ARCHIVELOG mode is enabled for the database before beginning the procedure to move data files.

To move a data file from one Oracle ASM disk group to another disk group using the RMAN BACKUP AS COPY procedure with the SET NEWNAME and SWITCH commands, perform the following steps.

1 Start RMAN and connect to the target database.

For example:

$ rman
RMAN> CONNECT TARGET SYS@orcl
target database Password: XXXXXXXXX
connected to target database: ORCL (DBID=1217369048)

生成显示数据文件名称的报告。

将RMAN连接到目标数据库后,运行以下报告命令。注意要移动的文件的数据文件名。

RMAN> REPORT SCHEMA;

Report of database schema for database with db_unique_name ORCL
 
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------- ------- ------------------------
1    740      SYSTEM         ***     +DATA/orcl/datafile/system.258.689589737
2    570      SYSAUX         ***     +DATA/orcl/datafile/sysaux.259.689589785
3    55       UNDOTBS1       ***     +DATA/orcl/datafile/undotbs1.260.689589831
4    5        USERS          ***     +DATA/orcl/datafile/users.261.689589837

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------- ----------- --------------------
1    20       TEMP           32767       +DATA/orcl/tempfile/temp.262.689589851

3  将数据文件备份到新的ASM磁盘组。

运行BACKUP AS COPY命令将DATA上的数据文件备份到USERDATA。

For example:

RMAN< BACKUP AS COPY
                DATAFILE "+DATA/orcl/datafile/users.261.689589837"
                FORMAT "+USERDATA";
Starting backup at 16-JUN-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=51 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=+DATA/orcl/datafile/users.261.689589837
output file name=+USERDATA/orcl/datafile/users.256.689682663
  tag=TAG20090616T103101 RECID=13 STAMP=689682663
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 16-JUN-09

您还可以通过数据文件号和数据文件类型来指定数据文件。

For example:

BACKUP AS COPY DATAFILE 4 
                 FORMAT "+USERDATA";    

4  要移动到新磁盘组的数据文件脱机。 

在RMAN客户机中运行以下SQL命令。在数据文件的名称周围使用两个单引号,而不是双引号。

RMAN> SQL "ALTER DATABASE DATAFILE
                      ' '+DATA/orcl/datafile/users.261.689589837' ' OFFLINE";

sql statemn:
            ALTER DATABASE DATAFILE
                        ‘ '+DAT/orcl/datafile/users.261.689589837' ' OFFLINE;

5  将控制文件指向新创建的数据文件副本。

Run the SWITCH...TO COPY command in the RMAN client. The TO COPY option of SWITCH switches the data file to the most recent copy of the data file.

SWITCH DATAFILE "+DATA/orcl/datafile/users.261.68959837" TO COPY;


datafile 4 switched to datafile copy
    "+USERDATA/orcl/datafile/users.256.689682663"

此命令的输出显示数据文件的新名称。

Recover the renamed data file.

Run the RECOVER command in the RMAN client.

For example:

RMAN> RECOVER DATAFILE "+USERDATA/orcl/datafile/user.256.689682663";

Starting recover at 16-JUN-09
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 16-JUN-09

7  Bring the data file online.

Run the SQL command in the RMAN client. Use two single quotation marks around the name of the data file, not double quotation marks.

For example:

RMAN> SQL "ALTER DATABASE DATAFILE
      ''+USERDATA/orcl/datafile/users.256.689682663'' ONLINE";

sql statement: ALTER DATABASE DATAFILE
   ''+USERDATA/orcl/datafile/users.256.689682663'' ONLINE

从原来的ASM磁盘组中删除数据文件副本。

在这个场景中,+DATA/orcl/datafile/users.261.689589837是数据中的原始数据文件。因为您为这个数据文件发出了SET NEWNAME和SWITCH命令,所以原始文件现在作为数据文件副本记录在RMAN存储库中。在RMAN客户机中运行DELETE命令来删除这个文件。

 

Delete the data file copy from the original Oracle ASM disk group.

In this scenario, +DATA/orcl/datafile/users.261.689589837 is the original data file in DATA. Because you issued SET NEWNAME and SWITCH commands for this data file, the original file is now recorded in the RMAN repository as a data file copy. Run a DELETEcommand in the RMAN client to remove this file.

RMAN> DELETE DATAFILECOPY "+DATA/orcl/datafile/users.261.689689837";


released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=51 device type=DISK
List of Datafile Copies
=======================
Key     File S Completion Time Ckp SCN    Ckp Time       
------- ---- - --------------- ---------- ---------------
14      4    A 16-JUN-09       864471     16-JUN-09      
        Name: +DATA/orcl/datafile/users.261.689589837
        Tag: TAG20090615T084217

Do you really want to delete the above objects (enter YES or NO)? y
deleted datafile copy
datafile copy file name=+DATA/orcl/datafile/users.261.689589837 RECID=14 STAMP=689683255
Deleted 1 objects