1. 程式人生 > >Oracle11g將dmp檔案還原

Oracle11g將dmp檔案還原

 最近用到從oracle的dmp檔案中還原資料
由於沒有這方面的資料,在網上搜集了一些,相信有以下這些資料,我們可以成功地將dmp檔案用命令列的方式還原回去

第一,啟動服務,(如果資料庫處於啟動狀態,那麼略過這一步)

開啟命令列執行以下語句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 以上方式是在windows服務中啟動服務,當windows服務不能啟動資料庫例項的時候,應用以下的語句

  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup 
 第二清理以前還原過的痕跡,如果我們在資料庫曾經還原過,我們先來清理一下,痕跡,

    //刪除使用者
    drop user xxxx cascade; 
    //刪除表空間
    drop tablespace xxxx;
    //刪除資料庫檔案
    e:/xxxxxx.dbf

第三,接下來,準備工作做好後,我們就可以開始還原了
//建立使用者
CREATE USER 使用者名稱 IDENTIFIED BY 密碼 

DEFAULT TABLESPACE  USERS 

TEMPORARY TABLESPACE TEMP;
 //給予使用者許可權
grant connect,resource,dba to xxxx;
 //建立表空間,並指定檔名,和大小

CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF' 
 SIZE 100M 
 AUTOEXTEND ON NEXT 100M 
 MAXSIZE UNLIMITED 
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

//執行給予許可權的指令碼grant.txt,將許可權給予剛才建立的使用者
//給予許可權
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx;


//開始匯入(完全匯入),file:dmp檔案所在的位置, ignore:因為有的表已經存在,對該表就不進行匯入。
   在後面加上 ignore=y 。指定log檔案 log=e:/log.txt(注:以下必須在cmd裡執行,在SQL*PLUS裡無法執行)
imp user/[email protected] full=y file=e:/xxx.dmp ignore=y log=e:/log.txt;

//當我們不需要完整的還原資料庫的時候,我們可以單獨地還原某個特定的表
//---------------------------------------------------------------------------
imp user/[email protected] file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/[email protected] file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx) 
//---------------------------------------------------------------------------

oracle11g到Oracle11g

一、在11g伺服器上,使用expdp命令備份資料

11g 匯出語句:EXPDP USERID='facial/[email protected] as sysdba' schemas=facial directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0

其中,我的使用者名稱是facial,密碼是facial,資料庫sid是orcl,schemas要匯出的使用者名稱是facial,要匯入到 10.2.0.1.0版本的Oracle資料庫中去。aa.dmp和aa.log將會在11g的dpdump目錄中生成,例如我的11g裝在了E盤下面,於是aa.dmp將會在E:\app\Administrator\admin\orcl\dpdump目錄下被生成。


二、在10g伺服器上,使用impdp命令恢復資料

準備工作:1.建庫2.建表空間3.建使用者並授權4.將aa.dmp拷貝到10g的dpdump目錄下

10g 匯入語句:IMPDP USERID='facial/[email protected] as sysdba' schemas=facial directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0 

oracle11g到Oracle10g

Oracle 11g匯出的dmp檔案匯入到oracle10g 

1.進行匯入表操作,提示:

IMP-00010: 不是有效的匯出檔案, 頭部驗證失敗
IMP-00000: 未成功終止匯入

2.從網上查閱,oracle資料11g到10g是有問題的,一般由oracle10g客戶端去連oracle11g進行匯出資料操作然後匯入到oracle10g,如果手中只有oracle11g的dmp檔案,怎麼辦

3.從網上查閱,頭部驗證失敗是由於版本號不同所致,經試驗可以通過如下方法進行修改:

       用notepad++工具開啟dmp檔案,可以看到頭部資訊 --TEXPORT:V11.01.00,即為源資料庫的版本號,將其修改為目的資料庫的版本號,如本機為10.02.01

4.再次進行匯入操作,匯入成功