zoukankan      html  css  js  c++  java
  • [原创]RMAN复制数据库

      RMAN复制数据库

    通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库。这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆)。ORACLE在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称。使用RMAN的复制数据库特性,可以从RMAN备份创建一个新的数据库,并为这个副本数据库保留已有的数据库名称或者赋予新的名称。

    RMAN术语和命令:

    A.                辅助数据库(Auxiliary database)RMAN将目标数据库复制到该数据库实例。要创建该数据库的参数文件、路径和口令文件。必须在RMAN数据库复制之前以非加载(NOMOUNT)模式启动辅助数据库实例。

    B.                 复制(Duplicate):从其它数据库的RMAN备份创建一个新的数据库。要在RMAN执行复制的位置配置数据库并启动Oracle的实例。从RMAN的角度来看,目标数据库被复制到副本数据库。

    C.                设置新名称(Set newname):在一个RMAN运行块内为数据文件设置新的名称,提供给该参数的文件名称覆盖任何该数据文件的辅助数据库名(SET AUXNAME)或者辅助数据库参数(DB_FILE_NAME_CONVERT)。这个新名称的值只在运行块内有效。

    D.                设置辅助名称(Set auxname):为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在。如果不希望以后的RMAN命令中使用这个设置的名称,则必须将该名称设置为NULL

    E.                 日志文件(log file):可以在Duplicate命令中作用这个关键词,以指定副本数据库创建的联机重做日志文件。如果没有特别指定这个关键词,则RMAN将在辅助参数文件中的LOG_FILE_NAME_CONVERT参数决定的路径中生成日志文件。如果没有这个RMAN关键词,而且也没有设置辅助参数,则RMAN将在目标数据库同样的位置创建日志(假设已指定了NOCHECKFILENAME选项)

    F.                 不检查文件名(Nocheckfilename):默认情况下,RMAN将检查在副本主机上被恢复到主目标数据文件路径下的数据文件,以确保不会被错误地覆盖。使用该选项可以覆盖这个默认的操作。这样就需要手工确保RMAN没有覆盖任何已存在的数据文件。应当谨慎使用这个命令,以防止覆盖数据文件。

    Duplicate命令执行的过程中,RMAN执行了一系列工作。当连接到目标、辅助和或选的目录数据库后,RMAN将进行以下操作:

    1)      根据最近发生的或者是提供的恢复停止点来决定复制操作将使用哪个基本的备份。

    2)      根据辅助数据库参数或RMAN设置的命令和选项来决定将数据文件保存在辅助数据库实例的什么位置。

    3)      为辅助数据库读出备份片或映像拷贝并恢复数据文件。这个RMAN的功能与执行正常的数据库还原是一样的。

    4)      根据恢复停止点将任何增量备份应用于还原数据文件。这个增量方式的应用与用RMAN发布恢复数据库命令的任务是一样的。

    5)      根据恢复停止点从磁盘或备份将所有归档日志文件应用于还原数据文件。

    6)      为辅助数据库创建新的控制文件。

    7)      当重新设置联机重做日志文件时,打开副本数据库。新的联机重做日志文件将根据RMAN复制数据库命令中指定的或者根据转换的辅助参数文件进行创建。

    创建副本数据库的步骤:

    1)      准备副本数据库参数文件:拷贝目标数据库的参数文件到$ORACLE_BASE/admin/clone/pfile位置。修改参数文件,替换所有目标数据库名为副本数据库名,同时增加两个参数:db_file_name_convert = (“primary”,”clone”)log_file_name_convert = (“primary”,”clone”),再在$ORACLE_HOME/dbs目录下增加参数文件的LINUX符号连接,或者%ORACLE_HOME%\database目录下增加windows参数文件。

    2)      创建口令文件:

    LINUX>orapwd file=$ORACLE_HOME/dbs/orapwCLONE password=clone entries=4

    WINNT>orapwd file=%ORACLE_HOME%\database\PWDCLONE.ORA password=clone

    3)      创建windows服务(linux不需要)

    WINNT>oradim –new –sid clone –intpwd clone

    4)      建立NET8连接

    5)      启动辅助实例:在RMAN创建副本数据库以前,辅助实例需要以非加载模式启动

    6)      加载或打开目标数据库

    7)      创建副本数据库

    C:\Documents and Settings\Administrator>rman

    Recovery Manager: 版本 9.2.0.1.0 - Production

    Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

    RMAN> connect target sys/oracle@mydb ;

    已联机到目标数据库: MYDB (DBID=2567199153)

    RMAN> connect catalog rman/rman@standby

    已联机至复原目录数据库

    RMAN> connect auxiliary sys/clone;

    联机至辅助数据库: clone (未挂载)

    RMAN> run{

    2>   SET UNTIL logseq 3 THREAD 1;

    3>   ALLOCATE auxiliary channel d1 TYPE DISK;

    4>   duplicate target DATABASE TO "CLONE";

    5>   }

    执行命令: SET until clause

    已配置信道: d1

    通道 d1: sid=14 devtype=DISK

    开始 Duplicate Db, 07-5 -08

    打印储存的命令档: Memory Script

    {

       set until scn 1077491;

       set newname for datafile 1 to "C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF";

       set newname for datafile 2 to "C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";

       set newname for datafile 3 to "C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";

       set newname for datafile 4 to "C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";

       set newname for datafile 5 to "C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";

       set newname for datafile 6 to "C:\ORACLE\ORADATA\CLONE\INDX1.DBF";

       set newname for datafile 7 to "C:\ORACLE\ORADATA\CLONE\ODM01.DBF";

       set newname for datafile 8 to "C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";

       set newname for datafile 9 to "C:\ORACLE\ORADATA\CLONE\USERS01.DBF";

       set newname for datafile 10 to "C:\ORACLE\ORADATA\CLONE\XDB01.DBF";

       set newname for datafile 11 to "C:\ORACLE\ORADATA\CLONE\MYTS01.DBF";

       restore

       check readonly

       clone database

       ;

    }

    执行命令档: Memory Script

    执行命令: SET until clause

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    执行命令: SET NEWNAME

    开始 restore, 07-5 -08

    通道 d1: 启动数据文件备份集的还原

    通道 d1: 正在设定要从备份集还原的数据文件

    正在将资料文件 00001 还原为 C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF

    正在将资料文件 00002 还原为 C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF

    正在将资料文件 00003 还原为 C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF

    正在将资料文件 00004 还原为 C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF

    正在将资料文件 00005 还原为 C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF

    正在将资料文件 00006 还原为 C:\ORACLE\ORADATA\CLONE\INDX1.DBF

    正在将资料文件 00007 还原为 C:\ORACLE\ORADATA\CLONE\ODM01.DBF

    正在将资料文件 00008 还原为 C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF

    正在将资料文件 00009 还原为 C:\ORACLE\ORADATA\CLONE\USERS01.DBF

    正在将资料文件 00010 还原为 C:\ORACLE\ORADATA\CLONE\XDB01.DBF

    正在将资料文件 00011 还原为 C:\ORACLE\ORADATA\CLONE\MYTS01.DBF

    通道 d1: 还原备份片 1

    处理片=D:\ORACLEBAK\DBMYDB_10_1_653973100 标志=WHOLE_INC0 参数=NULL

    通道 d1: 还原完成

    完成 restore, 07-5 -08

    sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE "CLONE" RESETLOGS ARCHIVELOG

     MAXLOGFILES     50

     MAXLOGMEMBERS      5

     MAXDATAFILES      100

     MAXINSTANCES     1

     MAXLOGHISTORY      226

     LOGFILE

     GROUP 1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE 104857600 REUSE,

     GROUP 2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE 104857600 REUSE,

     GROUP 3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE 104857600 REUSE

     DATAFILE

     'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'

     CHARACTER SET AL32UTF8

    打印储存的命令档: Memory Script

    {

       switch clone datafile all;

    }

    执行命令档: Memory Script

    数据文件 2 已切换至数据文件复制本

    输入数据文件复本 recid=1 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01

    .DBF

    数据文件 3 已切换至数据文件复制本

    输入数据文件复本 recid=2 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01

    .DBF

    数据文件 4 已切换至数据文件复制本

    输入数据文件复本 recid=3 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.D

    BF

    数据文件 5 已切换至数据文件复制本

    输入数据文件复本 recid=4 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01

    .DBF

    数据文件 6 已切换至数据文件复制本

    输入数据文件复本 recid=5 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF

    数据文件 7 已切换至数据文件复制本

    输入数据文件复本 recid=6 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF

    数据文件 8 已切换至数据文件复制本

    输入数据文件复本 recid=7 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.D

    BF

    数据文件 9 已切换至数据文件复制本

    输入数据文件复本 recid=8 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.D

    BF

    数据文件 10 已切换至数据文件复制本

    输入数据文件复本 recid=9 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF

    数据文件 11 已切换至数据文件复制本

    输入数据文件复本 recid=10 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.D

    BF

    打印储存的命令档: Memory Script

    {

       set until scn 1077491;

       recover

       clone database

        delete archivelog

       ;

    }

    执行命令档: Memory Script

    执行命令: SET until clause

    开始 recover, 07-5 -08

    启动媒体恢复

    通道 d1: 启动存盘日志还原到预设目的

    通道 d1: 还原存盘日志

    存盘日志系线=1 顺序=1

    通道 d1: 还原存盘日志

    存盘日志系线=1 顺序=2

    通道 d1: 还原备份片 1

    处理片=D:\ORACLEBAK\ARCHMYDB_11_1_654043289 标志=TAG20080506T224129 参数=NULL

    通道 d1: 还原完成

    存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF 系线=1 顺序=1

    通道 clone_default: 删除存盘日志

    存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF recid=2 戳记=654059855

    存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF 系线=1 顺序=2

    通道 clone_default: 删除存盘日志

    存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF recid=1 戳记=654059854

    媒体恢复完成

    完成 recover, 07-5 -08

    打印储存的命令档: Memory Script

    {

       shutdown clone;

       startup clone nomount ;

    }

    执行命令档: Memory Script

    已卸下数据库

    已关闭 Oracle 执行处理

    联机至辅助数据库 (未启动)

    已启动 Oracle 执行处理

    系统整体区域总共是     122755896 个字节

    Fixed Size                      453432 个字节

    Variable Size                 96468992 个字节

    Database Buffers              25165824 个字节

    Redo Buffers                    667648 个字节

    sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE \CLONE\ RESETLOGS ARCHIVELOG

     MAXLOGFILES     50

     MAXLOGMEMBERS      5

     MAXDATAFILES      100

     MAXINSTANCES     1

     MAXLOGHISTORY      226

     LOGFILE

     GROUP 1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE 104857600 REUSE,

     GROUP 2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE 104857600 REUSE,

     GROUP 3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE 104857600 REUSE

     DATAFILE

     'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'

     CHARACTER SET AL32UTF8

    打印储存的命令档: Memory Script

    {

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\INDX1.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\ODM01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\USERS01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\XDB01.DBF";

       catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\MYTS01.DBF";

       switch clone datafile all;

    }

    执行命令档: Memory Script

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF recid=1 戳记=654059903

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF recid=2 戳记=654059903

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF recid=3 戳记=654059903

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF recid=4 戳记=654059904

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF recid=5 戳记=654059904

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF recid=6 戳记=654059904

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF recid=7 戳记=654059904

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.DBF recid=8 戳记=654059905

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF recid=9 戳记=654059905

    数据文件备份已加入目录

    数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.DBF recid=10 戳记=654059905

    数据文件 2 已切换至数据文件复制本

    输入数据文件复本 recid=1 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01

    .DBF

    数据文件 3 已切换至数据文件复制本

    输入数据文件复本 recid=2 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01

    .DBF

    数据文件 4 已切换至数据文件复制本

    输入数据文件复本 recid=3 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.D

    BF

    数据文件 5 已切换至数据文件复制本

    输入数据文件复本 recid=4 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01

    .DBF

    数据文件 6 已切换至数据文件复制本

    输入数据文件复本 recid=5 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF

    数据文件 7 已切换至数据文件复制本

    输入数据文件复本 recid=6 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF

    数据文件 8 已切换至数据文件复制本

    输入数据文件复本 recid=7 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.D

    BF

    数据文件 9 已切换至数据文件复制本

    输入数据文件复本 recid=8 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.D

    BF

    数据文件 10 已切换至数据文件复制本

    输入数据文件复本 recid=9 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF

    数据文件 11 已切换至数据文件复制本

    输入数据文件复本 recid=10 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.D

    BF

    打印储存的命令档: Memory Script

    {

       Alter clone database open resetlogs;

    }

    执行命令档: Memory Script

    已开启数据库

    完成 Duplicate Db, 07-5 -08

    RMAN>

    使用RMAN的关键词和命令来控制数据文件和日志文件的名称和位置 

    可以如下控制数据文件的位置并设置新名称或设置辅助名称

    SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL

    SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL
    SET auxname FOR DATAFILE 4 TO 'c:\oracle\oradata\clone\auxname03.dbf';
    SET auxname FOR DATAFILE 6 TO 'c:\oracle\oradata\clone\auxname04.dbf';
    run{
     ALLOCATE auxiliary channel d1 TYPE DISK;
     SET UNTIL logseq 3 THREAD 1;
     SET newname FOR DATAFILE 1 TO 'c:\oracle\oradata\clone\newname01.dbf'; #RMAN运行块内为数据文件设置新的名称,这个新名称的值只在运行块内有效
     SET newname FOR DATAFILE 3 TO 'c:\oracle\oradata\clone\newname03.dbf';
     SET newname FOR DATAFILE 5 TO 'c:\oracle\oradata\clone\newname05.dbf';
     SET newname FOR DATAFILE 7 TO 'c:\oracle\oradata\clone\newname07.dbf';
     duplicate target DATABASE TO \CLONE\ LOGFILE
        GROUP 1 ('c:\oracle\oradata\clone\redo1_1.log',
                 'c:\oracle\oradata\clone\redo1_2.log') SIZE 10M REUSE,
        GROUP 2 ('c:\oracle\oradata\clone\redo2_1.log',
                 'c:\oracle\oradata\clone\redo2_2.log') SIZE 10M REUSE,
        GROUP 3 ('c:\oracle\oradata\clone\redo3_1.log',
                 'c:\oracle\oradata\clone\redo3_2.log') SIZE 10M REUSE;
     }
    SET auxname FOR DATAFILE 2 TO NULL;
    SET auxname FOR DATAFILE 4 TO NULL;
    SET auxname FOR DATAFILE 6 TO NULL;              

    在复制期间为clone数据库的每个数据文件指定一个新的文件名(或位置)。这样,当将目标数据库备份还原到复制数据库位置时,

    每个鞴憟韫i以被重新命名,日志文件可以指定为附加到DUPLICATE TARGER DATABASE命令,在以上的示例中,每个数据文件都被重命名,

    并且日志文件也被重新定义大小、重命名和镜像,对单数的数据文件重命名而对偶数的数据文件辅助命名。

  • 相关阅读:
    [翻译]Webpack解惑
    Vue.js与angular在数据实现的思考
    多线程入门-第三章-线程的调度与控制之优先级
    多线程入门-第二章-线程的生命周期
    多线程入门-第一章-线程的创建与启动
    多线程入门-概述
    IO流入门-第十三章-File相关
    IO流入门-第十二章-ObjectInputStream_ObjectOutputStream
    IO流入门-第十一章-PrintStream_PrintWriter
    IO流入门-第十章-DataInputStream_DataOutputStream
  • 原文地址:https://www.cnblogs.com/jimeper/p/1186088.html
Copyright © 2011-2022 走看看