1. 程式人生 > >使用RMAN遷移資料庫到異機

使用RMAN遷移資料庫到異機

        遷移資料庫的方法有多種,較為常用的則是使用RMAN來遷移。使用RMAN遷移資料庫屬於資料庫的物理備份與恢復範疇,整個過程中資料庫的相關資訊是完整地映象。因此,基於此種方式還原恢復的資料庫用於測試會使得與真實的生產環境差異相對較小。本文描述了使用RMAN來還原Oracle 10g資料庫的過程。

一、主要步驟
     1、備份資料庫
     2、ftp備份到目的伺服器
     3、為目標資料庫建立專案目錄
     4、為目標資料庫建立pfile或spfile(使用RMAN還原或複製原pfile到目的伺服器)
     5、還原控制檔案
     6、還原資料檔案
     7、OPEN 資料庫
  
  其實,這幾個步驟比較好理解,整個實質是對資料庫體系結構以及資料庫整個啟動過程的理解。
  關於體系結構和啟動過程可以參考
      

Oracle例項和Oracle資料庫(Oracle體系結構)
       Oracle 資料庫例項啟動關閉過程

  下面對此進行一下描述
       a、首先需要為例項的執行環境建立相應的目錄,如dump位置,datafile位置,以及archive位置等等
             如果是恢復到不同的路徑,則後續RMAN時需要使用set newname for datafile 方式更新到控制檔案
       b、例項需要pfile來啟動,因此需要恢復pfile或spfile,然後將資料庫切換到nomount狀態
       c、接下來的一步是通過控制檔案將資料庫切換到mount狀態,因此需要恢復控制檔案,然後再mount
       d、mount之後就可以對資料庫進行還原(restore)操作
       e、還原完畢之後是對資料庫進行恢復(recovery)操作(restore和recover需要基於控制檔案的備份資訊或恢復目錄)
       f、最後是open資料庫


二、遷移演示

1、備份原資料庫
  此處演示的源資料庫與目標資料庫使用相同的版本為Oracle 10g R2(10.2.0.3),作業系統都為suse 10 +Sp3
  備份過程略,有關備份指令碼,請參考:linux 下RMAN備份shell指令碼 http://blog.csdn.net/robinson_0612/article/details/8029245

2、ftp所有的備份檔案到需要恢復的伺服器上
  打包整個備份集ftp到目標伺服器或scp到目標伺服器
  下面是ftp到目標伺服器解壓後包含的檔案
  [email protected]:/u02/database/SY5221_RMAN/20121013> ls -hltr
  total 9.4G
  -rw-r--r-- 1 oracle oinstall 3.0K 2012-10-16 09:48 initSY5221.ora
  -rw-r--r-- 1 oracle oinstall 2.7G 2012-10-16 10:02 SY5221_lev0_201210130630_4unnkjvi_1_1
  -rw-r--r-- 1 oracle oinstall 3.1G 2012-10-16 10:04 SY5221_lev0_201210130630_4vnnkjvi_1_1
  -rw-r--r-- 1 oracle oinstall 938M 2012-10-16 10:07 SY5221_lev0_201210130630_arc_51nnkk2h_1_1
  -rw-r--r-- 1 oracle oinstall 935M 2012-10-16 10:08 SY5221_lev0_201210130630_arc_52nnkk2h_1_1
  -rw-r--r-- 1 oracle oinstall 930M 2012-10-16 10:10 SY5221_lev0_201210130630_arc_53nnkk31_1_1
  -rw-r--r-- 1 oracle oinstall  15M 2012-10-16 10:10 SY5221_lev0_cntl_bak_c-1468911009-20121013-00
  -rw-r--r-- 1 oracle oinstall  15M 2012-10-16 10:10 SY5221_lev0_cntl_bak_c-1468911009-20121013-01
  -rw-r--r-- 1 oracle oinstall 910M 2012-10-16 10:11 SY5221_lev0_201210130630_arc_54nnkk32_1_1

3、建立所需的目錄(使用oracle使用者)
  
[email protected]
:~> more mkdir_sy5221.sh mkdir -p /u02/database/SY5221/flash_recovery_area mkdir -p /u02/database/SY5221 mkdir -p /u02/database/SY5221/archive mkdir -p /u02/database/SY5221/backup mkdir -p /u02/database/SY5221/bdump mkdir -p /u02/database/SY5221/cdump mkdir -p /u02/database/SY5221/udump mkdir -p /u02/database/SY5221/controlf mkdir -p /u02/database/SY5221/oradata mkdir -p /u02/database/SY5221/redolog mkdir -p /u02/database/SY5221/undo mkdir -p /u02/database/SY5221/temp mkdir -p /u02/database/SY5221/ref_data mkdir -p /u02/database/SY5221/BNR mkdir -p /u02/database/SY5221/BNR/full mkdir -p /u02/database/SY5221/BNR/dump mkdir -p /u02/database/SY5221/dbcreatelogs ORACLE_SID=SY5221; export ORACLE_SID [email protected]:~> chmod u+x mkdir_sy5221.sh [email protected]:~> ./mkdir_sy5221.sh 4、建立密碼檔案 [email protected]:~> cd $ORACLE_HOME/dbs [email protected]:~/OraHome10g/dbs> orapwd file=orapwSY5221 password=oracle force=y entries=10 # Author : Robinson # Blog : http://blog.csdn.net/robinson_0612 3、使用pfile啟動例項到nomount狀態 [email protected]:~> cp /u02/database/SY5221_RMAN/20121013/initSY5221.ora $ORACLE_HOME/dbs [email protected]:~> export ORACLE_SID=SY5221 [email protected]:~> sqlplus / as sysdba SQL> startup nomount; 4、恢復控制檔案並切換到mount狀態 #再開一個session [email protected]:~> export ORACLE_SID=SY5221 [email protected]:~> $ORACLE_HOME/bin/rman target / RMAN> restore controlfile from '/u02/database/SY5221_RMAN/20121013/SY5221_lev0_cntl.bak_c-1468911009-20121013-01'; RMAN> alter database mount; 5、指定備份檔案所在目錄 RMAN> catalog start with '/u02/database/SY5221_RMAN/20121013'; #此命令用於掃描整個目錄的備份片或者歸檔日誌檔案等 6、還原資料庫 RMAN> restore database; 7、恢復資料庫 RMAN> recover database; unable to find archive log archive log thread=1 sequence=143388 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 10/16/2012 11:32:54 RMAN-06054: media recovery requesting unknown log: thread 1 seq 143388 lowscn 608805162 #由於未複製聯機日誌檔案,此時提示需要seqence 143388,scn 608805162 #在sqlplus提示符下繼續介質恢復 SQL> conn / as sysdba Connected. idle> recover database until cancel; ORA-00283: recovery session canceled due to errors ORA-01610: recovery using the BACKUP CONTROLFILE option must be done SQL> recover database using backup controlfile until cancel; ORA-00279: change 608805162 generated at 10/13/2012 06:31:44 needed for thread 1 ORA-00289: suggestion : /u02/database/SY5221/archive/arch_668881377_1_143388.arc ORA-00280: change 608805162 for thread 1 is in sequence #143388 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} cancel #輸入cancel,完成介質恢復 Media recovery cancelled. 8、open 資料庫 #如果open 不成功,請嘗試shutdown 之後再次open,如果仍然不成功使用隱藏引數_allow_resetlogs_corruption開啟資料庫 SQL> alter database open resetlogs; Database altered. 9、一致性關閉資料庫並重啟資料庫 SQL> shutdown immediate; SQL> startup

恢復到異機不同目錄的情形(補充內容@20130906)

步驟基本上與使用的相同目錄差不多,有些需要注意的,下面一一列出

1、備份資料及ftp到目的伺服器,同之前

2、建立相應的目錄
  此處的目錄有別於原目錄,如下面的示例
  原目錄: /u02/database/SY5221  原資料庫名: SY5221 (主機: Linux1, ORACLE_SID=SY5221)
  新目錄: /u02/database/SY5223  新資料庫名:SY5223 (主機: Linux2, ORACLE_SID=SY5223)

3、建立pfile檔案並啟動例項
  從原庫提取引數檔案到目的伺服器,根據需要修改相應的引數,如增加sga大小等  
  其次修改pfile檔案中的相關路徑使之指向新的位置,即引數檔案中所有含SY5221目錄的應修改為SY5223
  注意db_name引數不變,為原來的db_name,待恢復完成後使用nid修改
  使用pfile檔案啟動到nomount狀態
  
3、還原控制檔案
  RMAN> restore controlfile from '/u02/database/bak/SY5221cntl.bak';

  --切換到mount狀態,注,db_name務必保持原db_name,否則切換到mount時提示
  --ORA-01103: database name 'SY5221' in control file is not 'SY5223'
  
  RMAN> alter database mount;

4、使用catalog start with指定備份檔案位置
  RMAN> catalog start with '/u02/database/bak';

5、還原及恢復資料庫,由於使用了不同的位置,因此我們需要使用set newname 子句,如下面的示例
  run{
  set newname for datafile 1  to  '/u02/database/SY5223/oradata/sysSY5223.dbf';                                 
  set newname for datafile 2  to  '/u02/database/SY5223/undo/undotbsSY5223.dbf';                                
  set newname for datafile 3  to  '/u02/database/SY5223/oradata/sysauxSY5223.dbf';                              
  set newname for datafile 4  to  '/u02/database/SY5223/undo/undotbsSY52232.dbf';                               
  set newname for datafile 5  to  '/u02/database/SY5223/oradata/SY5223_system_tbl.dbf';                         
  set newname for datafile 6  to  '/u02/database/SY5223/oradata/SY5223_account_tbl.dbf';                        
  set newname for datafile 7  to  '/u02/database/SY5223/oradata/SY5223_stock_tbl.dbf';                          
  set newname for datafile 8  to  '/u02/database/SY5223/oradata/SY5223_stock_l_tbl.dbf';
  restore database;
  switch datafile all;
  recover database;}
  
  --Recover過程中會收到如下錯誤提示
  RMAN-03002: failure of recover command at 09/06/2013 22:40:54
  RMAN-06054: media recovery requesting unknown log: thread 1 seq 2872 lowscn 18896302
  
  --我們使用until子句來再次recover
  RMAN>run{
  2> set until sequence 2872;
  3> recover database;
  4> alter database open resetlogs;
  5> }
  
  executing command: SET until clause
  
  Starting recover at 06-SEP-13
  using channel ORA_DISK_1
  
  starting media recovery
  media recovery complete, elapsed time: 00:00:03
  
  Finished recover at 06-SEP-13
  
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of alter db command at 09/06/2013 22:52:04
  ORA-00344: unable to re-create online log '/u02/database/SY5221/redolog/log1aSY5221.log'
  ORA-27040: file create error, unable to create file
  Linux-x86_64 Error: 2: No such file or directory
  
  --上面又收到了錯誤提示,是由於無法建立日誌檔案,因為路徑與原來的資料庫路徑不一致
  RMAN> exit

6、修改日誌檔案位置及open資料庫
  $ sqlplus / as sysdba
  SQL> select name,open_mode from v$database;
  
  NAME      OPEN_MODE
  --------- ----------
  SY5221    MOUNTED
  
  SQL> set linesize 190
  SQL> col member format a60  
  SQL> select * from v$logfile;
  
      GROUP# STATUS  TYPE    MEMBER                                                       IS_
  ---------- ------- ------- ------------------------------------------------------------ ---
           1         ONLINE  /u02/database/SY5221/redolog/log1aSY5221.log                 NO
           1         ONLINE  /u02/database/SY5221/redolog/log1bSY5221.log                 NO
           2         ONLINE  /u02/database/SY5221/redolog/log2aSY5221.log                 NO
           2         ONLINE  /u02/database/SY5221/redolog/log2bSY5221.log                 NO
  
  SQL> set heading off;
  SQL> select 'alter database rename file '''||member||''' to '''||replace(member,'SY5221','SY5223')||''';' from v$logfile;
  
  alter database rename file '/u02/database/SY5221/redolog/log1aSY5221.log' to '/u02/database/SY5223/redolog/log1aSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log1bSY5221.log' to '/u02/database/SY5223/redolog/log1bSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log2aSY5221.log' to '/u02/database/SY5223/redolog/log2aSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log2bSY5221.log' to '/u02/database/SY5223/redolog/log2bSY5223.log';
  
  SQL> alter database rename file '/u02/database/SY5221/redolog/log5bSY5221.log' to '/u02/database/SY5223/redolog/log5bSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log6aSY5221.log' to '/u02/database/SY5223/redolog/log6aSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log6bSY5221.log' to '/u02/database/SY5223/redolog/log6bSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log7aSY5221.log' to '/u02/database/SY5223/redolog/log7aSY5223.log';  
  
  SQL> set heading on;
  SQL> alter database open resetlogs;
  
  Database altered.

7、修正相應的臨時資料檔案
  SQL> select * from dba_temp_files;
  select * from dba_temp_files
                *
  ERROR at line 1:
  ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
  ORA-01110: data file 201: '/u02/database/SY5221/temp/tempSY5221.dbf'
  
  SQL> select name from v$tempfile;
  
  NAME
  ------------------------------------------------------------
  /u02/database/SY5221/temp/tempSY5221.dbf
  /u02/database/SY5221/temp/SY5221_tempSY5221.dbf
  
  SQL> alter tablespace temp add tempfile '/u02/database/SY5223/temp/tempSY5223.dbf' size 50m;          
  
  SQL> alter tablespace goex_temp add tempfile '/u02/database/SY5223/temp/SY5223_tempSY5223.dbf' size 50m;
  
  SQL> alter tablespace temp drop tempfile '/u02/database/SY5221/temp/tempSY5221.dbf';
  
  SQL> alter tablespace goex_temp drop tempfile '/u02/database/SY5221/temp/SY5221_tempSY5221.dbf';
  
  SQL> alter database tempfile '/u02/database/SY5223/temp/tempSY5223.dbf' autoextend on;

  SQL> alter database tempfile '/u02/database/SY5223/temp/SY5223_tempSY5223.dbf' autoextend on;

  SQL> select count(*) from dba_temp_files;
  
    COUNT(*)
  ----------
           2
 
  SQL> shutdown immediate;
 
8、使用nid修改資料庫名字        
  $ export ORACLE_SID=SY5223
  $ sqlplus / as sysdba
  SQL> startup mount pfile=/u02/database/SY5223/initSY5223.ora;
  $ nid target=sys/oracle dbname=SY5223 setname=yes     #nid命令用法可參考:使用nid命令修改 db name 及 dbid
  修改完畢後,修改pfile檔案中的db_name引數為SY5223,啟動資料庫,生成spfile;同時建立相應的密碼檔案
  SQL> create spfile from pfile;
  $orapwd file=orapwSY5223 password=oracle force=y entries=10

9、配置listener及tnsnames,根據需要全備資料庫

三、更多參考

有關基於使用者管理的備份和備份恢復的概念請參

有關RMAN的備份恢復與管理請參

有關ORACLE體系結構請參

相關推薦

使用RMAN遷移資料庫

        遷移資料庫的方法有多種,較為常用的則是使用RMAN來遷移。使用RMAN遷移資料庫屬於資料庫的物理備份與恢復範疇,整個過程中資料庫的相關資訊是完整地映象。因此,基於此種方式還原恢復的資料庫用於測試會使得與真實的生產環境差異相對較小。本文描述了使用RMAN來還原O

RMAN遷移資料庫(不改變檔案目錄)

1、目標庫建立相應目錄mkdir -p /u01/app/oracle/oradata/orclmkdir -p /u01/app/oracle/fast_recovery_area/ORCLmkdir -p /u01/app/oracle/admin/orcl/{a,dp}dump 2、目標庫建立密碼檔案

記一次虛擬機器複製遷移啟動報could not open disk image /123.img: Invalid argument 錯誤

過程是這樣的; 內網兩臺機器 192.168.2.215  複製出 192.168.2.203  複製到此處啟動 啟動時報錯 virsh # start z6-006-208 error: Failed to start domain z6-006-208 error:

ORACLE 只有rman 完整備份恢復

恢復資料庫需要準備的檔案:rman完整備份(包括資料檔案、日誌檔案、控制檔案、引數檔案),記錄源資料庫的DBID 一、安裝資料庫ORACLE資料庫軟體並建立跟源資料庫同名和資料庫SID並修改資料庫DBID跟源資料庫DBID一樣,建立跟源資料庫伺服器相同的資料檔案目錄、日誌檔

ORACLE 11G 中採用rman備份恢復資料庫詳細過程

場景:        有一個生產庫的使用者下面所有的表都不見了,懷疑人為被刪除了,現在需要用備份去恢復下,找出原來的表,線上是oracle dataguard環境,有全庫備份檔案,準備去測試庫恢復一下。1,從生產庫上copy好全備份檔案恢復資料庫需要準備的檔案:rman完整備

RMAN恢復資料庫

      RMAN> list backup;   RMAN-00571: ===========================================================   RMAN-00569: =============== ERROR MESSAGE STACK FOL

Oracle 單例項 遷移到 RAC 例項 -- 使用RMAN 恢復

Oracle 官網有關單例項遷移到RAC的一個步驟說明: How to Convert 10g Single-Instance database to 10g RAC using Manua

在Oracle Database 12.1 中遷移恢復數據庫【實戰】

異機恢復 oracle12c restore recover 平臺環境:源OS:Oracle Linux 7.3源DB:Oracle Database 12.1.0.2 目標OS:Oracle Linux 7.3目標DB:Oracle Database 12.1.0.2一、準備工作1、查詢當前

Rman備份恢復

最後更新時間:2018/12/29 前置條件 已準備一臺安裝好Centos6+oracle11gr2 軟體的伺服器; 只安裝了 oracle 資料庫軟體,需要手工建立以下目錄: #環境變數 export ORACLE_SID=orcl #由於只安裝軟體未建立資料庫所以需建立對應資料夾 mkdir -p $

postgresql資料庫遷移及問題處理

環境: 資料庫版本:postgresql 9.5 作業系統A:linux   4 作業系統B:linux        5.8 操作內容: 將部署在伺服器A(*.*.201.210)上的PG9.5軟體及資料庫資料,遷移到伺服器B(*.*.188.197)的相同目錄。

rac環境rman備份恢復至單機

2、將rac環境的rman備份拷貝到單機。並就rac環境pfile copy到單機,根據單機主機資源,修改叢集引數,例項名,檔案路徑以及sga和pga等引數。修改如下: [[email protected] trace]$ more /backup/test1.ora binbin1.__db_ca

Oracle RMAN恢復歸檔RMAN-07518(供日誌挖掘使用)及修改dbid步驟

Recovery Manager: Release 11.2.0.4.0 - Production on Sat Jul 16 15:35:06 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

oracle 12c RMAN恢復還原RAC叢集(ASM)為單例項庫(檔案系統)記錄

CONFIGURE CONTROLFILE AUTOBACKUP ON備份集準備 backup database format '/home/databak/whole_%d_%U'; backup spfile format '/home/databak/spfile_%

使用RMAN遷移檔案系統資料庫到ASM

--================================== -- 使用RMAN遷移檔案系統數據庫到ASM --================================== 在

利用rman進行還原(目錄不同)

--注:備份操作省略,詳見利用rman進行異機還原(目錄相同)。下列操作均在目標伺服器上進行。 --rman [[email protected] ~]$ rman target / Recovery Manager: Release 10.2.0.1.0 - P

ASM磁碟組遷移

環境: Source: OS:redhat 6.3 DB:Oralce RAC 11.2.4.0 destination: OS:redhat 6.3 DB:Oralce RAC 11.2.4.0 背景:客戶的PC機上面有兩個例項,壓力太大,需要遷移出一個例項。資料量TB級

NBU 恢復 SQL Server

nbu7 netbackup7 備份 sql server ms-sql 異機恢復創建SQL恢復腳本在SQL Server服務器上打開NBU SQL Client選擇Restore SQL Server Objects3、SQL HOST寫本機4、選擇需要還原的庫,並保存腳本創建SQL恢復策略1、類型選擇MS

Veritas Netbackup SQLServer 本備份恢復

netbackup sqlserver 概述: 本次實驗環境采用Veritas Netbackup 7.7.3軟件版本,對SQLServer數據庫的備份和恢復。SQL Server恢復實驗拓補圖:本機恢復SQL數據庫:首先在SQL數據庫本機配置hosts解析,安裝Netbackup Agent客戶

Oracle 10.2.0.5 RMAN遷移並升級11.2.0.4一例

oracle 遷移 rman 一、環境介紹1. 源數據庫環境操作系統版本: OEL 5.4 x64數據庫版本 : 10.2.0.5 x64數據庫sid名 : orclOracle 10g 10.2.0.5(64bit)安裝目錄如下:數據庫軟件:/u01/app/oracle/product/10

Linux 本/文件對比

-1 image span ges style gre es2017 nbsp 1.2 一:提取異步機器文件 #ssh 192.168.1.2 "cat /etc/glance/glance-api.conf | grep -v ‘#‘ |grep -v ^$"