我的一個expdp/impdp任務總結

coolhe發表於2010-07-15

本次資料庫移植有以下幾個步驟,每個步驟有分解,詳細如下

1. 從41機器上匯出資料 10-15分鐘
2. 從41機器上把匯出的資料ftp到15機器的/fs2/dump目錄下 15-20分鐘左右
3. 從把41匯出的資料匯入到15機器上 2:30左右

-------1. 從41機器上匯出資料
1.1 如果是要正式的資料庫移植,需要確定41資料庫沒有其他的使用者連線,並且沒有其他的事務進行。
    -- 切斷41機器和外界網路的連線
1.2 用expdp命令進行匯出資料.expdp命令只能用在服務端執行,並且只能是10g以上的版本,命令如下:
    --在41機器上執行的expdp匯出命令
    --expbp匯出使用者全部物件多個檔案, 每個檔案4G, 匯出的檔案為後面帶日期,該匯出過程需要10-15分鐘
    --該命令需要在/tmp/dump目錄下執行,執行之後應該能看到6個相關檔案,5個dmp檔案 1個exp.log檔案,注意檢查
    expdp gmm_zzrq/gmm_zzrq directory=dump_dir dumpfile=gmmdb_`date +"%Y%m%d%H%M%S"`_01.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_02.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_03.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_04.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_05.dmp  logfile=gmmdb_`date +"%Y%m%d%H%M%S"`_exp.log job_name=CASES_EXPORT parallel=2 FILESIZE=4G EXCLUDE=DB_LINK
   
-------2. 從41機器上把匯出的資料ftp到15機器的/fs2/dump目錄下
2.1 確認15機器上有/fs2/dump目錄,如果沒有說明15機器重新啟動過,/fs2檔案系統是另外掛接的一個裝置,需要掛接。在/home/oracle目錄下有個掛接指令碼,用root使用者執行下面的命令,即可掛接該裝置,並能找到/fs2/dump資料夾,資料夾下面目前有些檔案,可以刪除以dmp字尾的檔案,/fs2的空間是50G,空出一定的空間大小(35G以上), 空間檢視命令:df -g 檢視
    --掛接/fs2目錄裝置。root使用者-------
    # sh /home/oracle/mountfs.sh
    --空間檢視命令:
    # df -g

2.2 從41節點ftp到15上, 命令如下:
    在41機器的/tmp/dump目錄下,注意ftp傳輸的時候一定要轉成2進位制的方式
    ####41機器
    # ftp 192.168.5.15
    user:oracle
    password:oracle
   
    ftp> cd /fs2/dump
    ftp> bi  
    ftp> prompt off
    ftp> mput gmmdb__*
   
   
    傳輸完畢,查詢15機器上/fs2/dump資料夾下的檔案是否和41機器的大小一樣。該ftp傳輸時間在15-20分鐘左右
   

 -------3. 從把41匯出的資料匯入到15機器上  
 --以下所有命令在15機器上執行
 
 3.1 檢視rac的節點執行狀態, 如果racdb2執行,需要關閉racdb2節點,執行命令3.2步驟,執行之後,繼續使用該命令檢視狀態.
   --檢視節點執行 
   srvctl status database -d racdb
   -- 顯示如下: 說明racdb2已經停止
   Instance racdb1 is running on node db01
   Instance racdb2 is not running on node db02
 
   也可以用命令:crs_stat -t 檢視
 
 3.2 停掉racdb2節點的例項
   --如果racdb2節點仍然在執行,用以下命令停止racdb2的例項
   --停止節點2命令
   srvctl stop instance -d racdb -i racdb2
  
 3.3 檢視15現在的rac資料庫是否存在使用者gmm_zzrq以及gmm_zzrq的所有物件
   --檢視是否能用gmm_zzrq登入,如果能登陸說明gmm_zzrq存在, 如果gmm_zzrq存在執行3.4命令
   sqlplus gmm_zzrq/gmm_zzrq

 3.4 刪除15機器資料庫中的gmm_zzrq使用者和該使用者下的所有物件
   ----級聯刪除使用者gmm_zzrq及其該使用者下的所有物件
   sqlplus system/oracle
  
   drop user gmm_zzrq cascade;
  
 3.5 執行匯入
 
 3.5.1  編輯指令碼 impdp_file.sh
  --注意dmp檔案的時間修改一下
  impdp system/oracle directory=dump_dir15 dumpfile= gmmdb_20100702201351_01.dmp, gmmdb_20100702201351_02.dmp,  gmmdb_20100702201351_03.dmp, gmmdb_20100702201351_04.dmp, gmmdb_20100702201351_05.dmp LOGFILE=gmmdb_`date +"%Y%m%d%H%M%S"`_imp.log parallel=2 SCHEMAS=gmm_zzrq job_name=CASES_IMPORT
 
 3.5.2  把編輯好的指令碼impdp_file.sh ftp到15機器的/fs2/dump資料夾下
 3.5.3  檢視15機器的/fs2/dump資料夾下,是否有nohup.out檔案,如果有的話,刪除
  # rm /fs2/dump/nohup.out
  
 3.5.4  在15機器的/fs2/dump資料夾下執行指令碼 impdp_file.sh,開始資料匯入,該匯入時間 在2:30左右
  nohup sh impdp_file.sh
  
  --在匯入的過程中,可以用以下命令檢視匯入的狀態
  cat nohup.out
 
 3.6 資料匯入完全後,檢視匯入的log檔案,檢查是否匯入有問題。根據以往的經驗,應該最後有12個error,這個沒有問題,只是過程和包的警告性錯誤。如果沒有其他的錯誤,說明匯入是成功的。
 
 3.7 檢查匯入成功之後,再手工匯入原有的41機器上的db_link
 
 4 補充: 檢查2個資料庫庫表資料的行數一致
   檔案《資料量統計》
   過程: sp_static_tab
   表:   tb_static_tab
   該過程和表,在41資料庫已經建立,在15機器上匯入資料庫之後,用gmm_zzrq建立以上表和過程。
   在41和15機器執行過程 sp_static_tab
  
   然後在15機器上查詢資料,rows_diff=0說明2個資料庫錶行數一致
   select a.table_name,
     a.table_rows rows_15,
     b.table_rows rows_41,
     b.table_rows - a.table_rows rows_diff
       from tb_static_tab a, tb_static_tab@dmp_link b
       where a.table_name = b.table_name
     order by rows_diff;
 
  
 
 
 
 資料移植完畢!
 lucky!
 
 
 ------下面是常用的命令和腳步,在15機器上執行
 
 --檢視crs狀態
  crs_stat -t

--檢視節點執行
  srvctl status database -d racdb
--停止節點2
  srvctl stop instance -d racdb -i racdb2
  --停止節點1
  srvctl stop instance -d racdb -i racdb1
--啟動節點2
  srvctl start instance -d racdb -i racdb2  
  --啟動節點1
  srvctl start instance -d racdb -i racdb1
  
   
--sql操作
sqlplus system/oracle

--檢視是否有表CASES_IMPORT,如果有刪除
select count(1) from CASES_IMPORT;
drop table CASES_IMPORT;

--級聯刪除使用者gmm_zzrq
  drop user gmm_zzrq cascade;
  
   
--有哪些使用者連線
--1.1
  select program, username,sid,serial# from v$session;
--1.2
  select program, username,sid,serial# from v$session
  where upper(username) ='GMM_ZZRQ';
 
--殺掉程式
  alter system kill session sid,serial#;
--查詢段空間
  select segment_name, segment_type, bytes/1024/1024 size_mb from user_segments a
     

--問題1:執行drop user gmm_zzrq cascade;操作出現如下問題:
        ORA-01940: cannot drop a user that is currently connected
  解決:用SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='GMM_ZZRQ';查詢
  然後alter system kill session sid,serial#; 就ok了,但是要注意如果是叢集RAC
  的話,就要多個節點都看看,否則會找不到相應的seesion.
   

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3090/viewspace-668063/,如需轉載,請註明出處,否則將追究法律責任。

相關文章