基於oracle數據庫的CLOUD備份恢復測試

CLOUD oracle數據庫備份恢復測試

強烈建議使用expdp/impdp,因爲:

在expdp的時候Oracle不會再依賴和參考NLS_LANG的設置,而是完全按照數據庫本身的字符集導出數據,impdp的時候,Oracle會自動判斷如果dmp文件中的字符集和目標數據庫的字符集不符時會自動對導入數據的字符集做轉換。這樣可以消除以前由於字符集的問題在導入過程中出現亂碼的問題。

1、創建備份目錄並授權:

mkdir /u01/app/testbackup
chmod 777 /u01/app/testbackup

在SQL中指定備份目錄

create or replace directory backup as '/u01/app/testbackup'

查看是否生效:

SELECT * FROM  ALL_DIRECTORIES;
SELECT * FROM  dba_DIRECTORIES;

結果如下:

wKiom1axxRbg1xqMAAA27Z3HItI315.png

查看用戶及對應的表空間:

select   username,default_tablespace,temporary_tablespace   from   dba_users;

2、備份數據庫

以管理中心爲例:

expdp directory=backup dumpfile=dcbackup02033.dmp logfile=dclogbackup02033.log schemas=clouddcadmin

Export: Release 11.2.0.3.0 - Production on Wed Feb 3 17:20:38 2016


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Username: sys as sysdba

Password: 


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options




Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:

  /u01/app/testbackup/dcbackup02033.dmp

Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at 17:23:36

備份成功後,會在/u01/app/testbackup目錄產生對應的備份文件dcbackup02033.dmp  dclogbackup02033.log

3、還原測試

方案一:建立同樣的用戶名和表空間進行恢復

先刪除對應的管理中心用戶和表空間和數據文件

注意先停止應用服務器的IIS服務和k3cloud相關係統服務

drop user clouddcadmin cascade
drop tablespace clouddc_data including contents and datafiles cascade constraints;
drop tablespace clouddc_temp including contents and datafiles cascade constraints;

再建立用戶和對應的表空間並授權

create temporary tablespace test1_temp
tempfile 'test_temp.dbf'
size 32m
autoextend on
next 32m maxsize UNLIMITED
extent management local;
 
create tablespace test1_data
logging 
datafile 'test1_data.dbf'
size 32m
autoextend on
next 32m maxsize UNLIMITED
extent management local;
 
create user test1 identified by cloud6
default tablespace test1_data
temporary tablespace test1_temp;
 
grant connect,resource,dba to test1;
grant create session to test1;
grant create table to test1;

最後使用impdp導入數據即可:

impdp directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin

[oracle@redhat64 app]$ impdp directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin


Import: Release 11.2.0.3.0 - Production on Wed Feb 3 17:31:04 2016


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Username: sys as sysdba

Password: 


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table "SYS"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded

Starting "SYS"."SYS_IMPORT_SCHEMA_01":  sys/******** AS SYSDBA directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin 

Processing object type SCHEMA_EXPORT/USER

ORA-31684: Object type USER:"CLOUDDCADMIN" already exists

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC

ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_OBJ_IDS" already exists

ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_INTTABLE" already exists

ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_VARCHARTABLE" already exists

ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_NVARCHARTABLE" already exists

ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_SPLIT_TBL" already exists

Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE

ORA-31684: Object type SEQUENCE:"CLOUDDCADMIN"."Z_BAS_ITEM" already exists

ORA-31684: Object type SEQUENCE:"CLOUDDCADMIN"."Z_BAS_DATACENTER_L" already exists

Processing object type SCHEMA_EXPORT/TABLE/TABLE



Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SYS"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 17:32:53

完成後,再啓用IIS和相關服務:

iisreset /start
net start K3CloudJobProcess
net start K3CloudManager

啓動完成後,再打開管理中心登錄即可。


方案二:不同用戶名,表空間時

1、創建用戶test(用IMPDP數據泵導入時系統自動創建用戶,密碼默認爲導入用戶密碼)


create user test identifiedby passwd default tablespace USERS temporary tablespace TEMP;


注:test 爲用戶名,passwd 爲用戶密碼,可根據實際情況進行調整;


2、 用戶賦權


SQL>grant connect,resource,dba to test;


注:此處爲用戶賦予連接權限和最大的DBA權限,可根據實際情況進行調整;


3、 恢復數據庫(採用impdp數據泵導入)


   鍵入exit命令退出sqlplus,在oracle用戶下利用impdp命令恢復數據庫:


   SQL>exit


impdp 'test/"passwd"' EXCLUDE=STATISTICS  DIRECTORY=backup DUMPFILE=K3cloudData20160729.dmp remap_schema=K3CLOUD:test parallel=2 transform=OID:n table_exists_action=replace logfile=impdplog.log


impdp  remap_schema=yxcloud:test1   remap_tablespace=CLOUD_D_STANDARD:test1_data   directory=BACKUP  dumpfile=YXCLOUD20161109_EXPDP.DMP logfile=yxcloud20161109_impdp.log  EXCLUDE=STATISTICS



如果不知道原schema用戶名,可能引出ORA-01917錯誤。可以不加remap_schema選項嘗試還原,如果失敗,在提示中可以看到原schema用戶名信息,如下圖:

K3CLOUD即是原ORACLE用戶名:

wKiom1er4PaA4uGVAAAWTxepuM0257.png-wh_50

------------------------------------------------------

還可能引出ORA-39083錯誤:

wKioL1er47PwStjSAAATUtG6W0E464.png-wh_50

加上remap_tablespace選項即可:

remap_tablespace=K3_D_CLOUD_STANDARD:USERS 


因爲之前的操作開正常完成,因此可能引出ORA-31684錯誤:(這個一般沒有關係,是表名已經存在了)

要解決可以這麼做:

加入一個table_exists_action=replace還原參數,或通過先刪除用戶,在從新創建一次還原就可以

drop user hr cascade;

--------------------------------------------------------

ora39083,ORA 01435錯誤,這個錯誤屬於非表數據錯誤,一般不影響數據:


Processing object type SCHEMA_EXPORT/TABLE/POST_TABLE_ACTION

ORA-39083: Object type POST_TABLE_ACTION failed to create with error:

ORA-01435: user does not exist

Failing sql is:

BEGIN 

 SYS.DBMS_SNAPSHOT_UTL.SYNC_UP_LOG('YXCLOUD','T_BD_DEPARTMENT');

 END; 

 

ORA-39083: Object type POST_TABLE_ACTION failed to create with error:

ORA-01435: user does not exist

Failing sql is:

BEGIN 

 SYS.DBMS_SNAPSHOT_UTL.SYNC_UP_LOG('YXCLOUD','T_BD_BANK');

 END; 


   注:impdp恢復命令中加入了transform=oid:n參數,如果多次恢復數據庫需要使用此參數,則需要重置OID。transform取值oid:n的含義就是對oid信息不進行加載,重新進行生成 。       

 parallel=30,參數大家跟蹤自己服務器的CPU\內存情況設置,我這裏128內存,所以改成30個併發。建議調整成10一下即可!即parallel=10

注意有多個表空間需要轉換時,則使用多個remap_tablespace=源:目標字段。

statistics=none是爲了不導入統計信息


恢復數據庫時報錯處理方案:

1、報錯如下(問題爲lttc用戶已經存在,可以忽略此報錯信息)

ORA-31684: Object type USER:"lttc" already exists

2、報錯如下(問題爲OID爲數據實例唯一id,恢復時請使用參數transform=oid:n重置OID,命令參照A用戶導入B用戶命令)

ORA-39083: Object type TYPE failed to create with error:

ORA-02304: invalid object identifier literal

Failing sql is:

CREATE TYPE "LTTC"."UDT_OBJ_IDS"   OID 'E25DDA5E8A4B49949184EE01BD4F564C' is object( FID varchar2(32767))

3、報錯如下(問題爲總部已經刪除此視圖中的表,所以恢復時報錯。處理方法請備份前刪除此視圖或恢復時忽略此報錯信息)

ORA-39082: Object type VIEW:"LTTC"."V_BAS_VCHENTRYSELECT" created with compilation warnings

ORA-39082: Object type VIEW:"LTTC"."V_BAS_VCHENTRYSELECT_L" created with compilation warnings

3、報錯如下臨時視圖報錯,可以忽略不計。

ORA-39082: Object type VIEW:"LTTC"."V741DB8F62753E3EB1CC025B59C6F9" created

with compilation warnings

ORA-39082: Object type VIEW:"LTTC"."VC87B4CFC1E329C091F685162688CF" created


以上轉:

http://club.kisdee.com/forum.php?mod=viewthread&tid=566903

4、ORA-39126錯誤:

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

ORA-39126: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS] 

ORA-06502: PL/SQL: numeric or value error

LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE"


ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95

ORA-06512: at "SYS.KUPW$WORKER", line 9715


----- PL/SQL Call Stack -----

  object      line  object

  handle    number  name

0x983331fc     21979  package body SYS.KUPW$WORKER

0x983331fc      9742  package body SYS.KUPW$WORKER

0x983331fc     17950  package body SYS.KUPW$WORKER

0x983331fc      4058  package body SYS.KUPW$WORKER

0x983331fc     10450  package body SYS.KUPW$WORKER

0x983331fc      1824  package body SYS.KUPW$WORKER

0x4eae2874         2  anonymous block


ORA-39097: Data Pump job encountered unexpected error -1427

ORA-39065: unexpected master process exception in DISPATCH

ORA-01427: single-row subquery returns more than one row


Job "TEST1"."SYS_IMPORT_FULL_02" stopped due to fatal error at Wed Oct 26 20:28:25 2016 elapsed 0 00:39:12


帶上EXCLUDE=STATISTICS後,成功導入

5、ORA-00959: 表空間 'CLOUD_D_STANDARD' 不存在

REMAP_TABLESPACE可以定義切換對象的不同表空間,其格式爲:

remap_tablespace=old_tablespace_name:new_tablespace_name


用戶空間切換要使用下面方案:

remap_schema=old_schema_name:new_schema_name



下面爲相關命令說明:

通過數據泵導出/導入Expdp/impdp

 

Oracle 10g引入了DATA PUMP提供的是一種基於服務器的數據提取和恢復的實用程序,DATA PUMP在體系結構和功能上與傳統的EXPORT和IMPORT實用程序相比有了顯著的提升。DATA PUMP允許您停止和重啓作業,查看運行的作業的狀態,及對導入和導出的數據做限制。


注意:數據泵文件與傳統的EXP/IMP數據轉儲文件是不兼容的。


一、以下是DATA PUMP的幾個優點介紹:


1.數據泵(DataPump)的所有工作都有數據庫實例來完成,數據庫可以並行來處理這些工作,不僅可以通過建立多個數據泵工作進程來讀/寫正在被導出/導入的數據,也可以建立並行I/O服務器以更快地讀取或插入數據,從而,單進程瓶頸被徹底解決。

2.通過數據泵,以前通過EXP/IMP主要基於Client/Server的邏輯備份方式轉換爲服務器端的快速備份,數據泵主要工作在服務器端,可以通過並行方式快速裝入或卸載數據,而且可以在運行過程中調整並行的程度,以加快或減少資源消耗。


二、步驟如下

1. 創建DIRECTORY

DATA PUMP要求爲將要創建和讀取的數據文件及日誌文件創建目錄,這個參數是用來定義一個目錄,前面已經提到數據泵主要在Server端工作,導出文件需要寫出到Server端本地目錄,這個DIRECTORY就是對應的Server端的目錄。將要訪問數據泵文件的用戶必須要擁有該目錄的讀/寫權限。

注意:在開始操作之前要驗證外部目錄是否存在,並且下達create directory命令的用戶需要擁有create anydirectory的系統權限。

下面給出一個創建名爲TEST的目錄並授予system用戶訪問此目錄讀/寫權限。

 創建目錄並賦予權限:


SQL>  Create directory TEST as 'd:\test';

SQL>  Grant read,write on directory TEST to system;


查看數據庫中已創建的directory的兩個視圖:

SELECT * FROM  ALL_DIRECTORIES;

SELECT * FROM  dba_DIRECTORIES;


然後在目標磁盤下手工創建文件夾d:\test

2.  數據泵導出

數據泵導出的方法有多種,這裏我們只介紹兩種:

 單個用戶方案導出

Expdp [用戶名]/[密碼]@[主機字符竄] schemas=[用戶名] directory=TEST dumpfile=X.dmp logfile=X.log

 數據庫全庫導出

Expdp [用戶名]/[密碼]@[主機字符竄] full=y directory=TEST dumpfile=X.dmp logfile=X.log


3. 數據泵導入

按以上導出方式:

 單個用戶方案導入

impdp [用戶名]/[密碼]@[主機字符竄] schemas=[用戶名] directory=TEST dumpfile=X.dmp logfile=X.log ignore=y

 數據庫全庫導入

impdp [用戶名]/[密碼]@[主機字符竄] full=y directory=TEST dumpfile=X.dmp logfile=X.log ignore=y

注意:directory的位置

drop directory test 刪除目錄


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章