Oracle IMPDP EXPDP使用小結

2021-08-31 23:19:16 字數 3265 閱讀 7507

資料幫浦主要解決的問題

比imp/exp

更加靈活,支援多種元資料過濾策略,多種匯入

/匯出模式,如將a庫

b使用者導到c庫中

d使用者,則只需要

remap_schema

即可空表問題,

oracle11g

新的表並且表中無資料也未使用過則表的

segment

空間是不會分配的,這樣在

exp時表是導不出來的,這個問題的解決就是給表分配

segment

或使用expdp

了select 'alter table ' || table_name || ' allocate extent;' from user_tables where num_rows=0

,將查詢結果匯出成

sql指令碼執行即可

alter system set deferred_segment_creation=false scope=both

效率問題,普通情況下

expdp/impdp

要比exp/imp

效率要高

expdp nstcsa224/642506@nsdev directory=expdp_dir dumpfile=nstcsa224_table.dmp tables=(gp_cell_values,gp_post,imes_attentionclient) logfile=nstcsa224_table.log version=10.2.0.1

正常匯入

impdp nstcsa224/642506@nsdev directory=impdp_dir dumpfile=nstcsa224_table.dmp logfile='smsdata_table.log' version=10.2.0.1

分析資料檔案生成

sql檔案

,不真正匯入到資料庫

impdp nstcsa224/642506@nsdev directory=impdp_dir dumpfile=nstcsa224_table.dmp

sqlfile=sqlfile.sql

version

=10.2.0.1 通過

db_link

遠端使用資料幫浦 建立

db_link

執行匯出

expdp nstcsa224/642506@nsdev directory=impdp_dir network_link=db_link dumpfile=nstcsa224_fb_tables.dmp logfile=nstcsa224_fb.log version=11.1

注意,如果客戶端資料幫浦與伺服器的版本不一致將不能正常工作

重複匯入時會使用到的

table_exists_action引數

這裡table_exists_action

表示當前庫中已經有某張表,然後匯入的時候我們可以對已有的表做處理,如跳過、刪除重建、追加資料等,更複雜些的匯入

/匯出需求可以結合

table_exists_action

、include

、exclude

、content

、query

等多個引數完成(可以查閱

oracle

文件)

impdp nstcsa224/642506@nsdev directory=impdp_dir dumpfile=nstcsa224.dmp logfile=nstcsa224.log table_exists_action=skip

資料幫浦版本相容問題

impdp/expdp

是在oracle 10

加入的工具,該工具預設不向下相容(即使用

expdp

匯出的oracle11g

是不能被

oracle10g

匯入的),這時就需要

expdp

時加入version

標記。

正常情況下在源資料庫上使用

expdp

命令加上

version

標記後匯出的資料庫檔案可正常被指定版本的

impdp

識別並匯入,但在實際實踐的過程中發現匯出時加上相應版本號在有些情況下也並未能正常的再被版本指定的

impdp

匯入,在這裡我們遇到的問題就要是從

oracle 11.2.0.1

上抽取版本為

11.2.0.1

之前的版本如

10.2.0.1\11.1.0.2

甚至是oracle 9

版本,但匯出的資料檔案並不能被低版本的

oracle

匯入。

此種情況下的一種解決辦法

涉及到的一些命令

impdp user_01/user_01@orcl directory=impdp_dir dumpfile=test_01.dmp logfile=test_01.log

impdp user_01/user_01@orcl directory=impdp_dir dumpfile=test_01.dmp sqlfile=test_01.sql tables=(a,b,c,d,e)

sqlplus

中執行放到

c:\盤下的某個

sql指令碼

impdp user_01/user_01@orcl directory=impdp_dir dumpfile=test_01.dmp logfile=test_01.log table_exists_action=skip

使用user_01

登陸當前資料庫,檢視資料物件與原始庫物件是否一致,如表數量是否相等

select count(1) from user_tables

重新編譯函式

\過程物件

利用第三方工具如

pl/sql developer

手工 查:

select object_type,count(1) from user_objects where status='invalid' group by object_type

構建重新編譯語句:

select 'alter ' || object_type || ' ' || object_name || ' compile;' from user_objects where status='invalid'

儲存成sql

指令碼然後執行

參考資源

VI使用小技巧

1 替換某一字串 s old word new word g 在整個檔案中將old word替換為new word 2 不進入vi編輯器將檔案中的某一字串替換掉 sed s 111 aaa g 1.txt 2.txt 將1.txt中所有的111替換為aaa,修改後的檔案寫入2.txt sed s 1...

IDE使用小技巧

vc 共享樂園 1 如何檢測程式中的括號是否匹配。把游標移動到需要檢測的括號 如大括號 方括號 圓括號 和尖括號 前面,鍵入快捷鍵 ctrl 如果括號匹配正確,游標就跳到匹配的括號處 否則游標不移動,並且機箱喇叭還會發出一聲警告聲。2 如何檢視乙個巨集 或變數 函式 的巨集定義。選中此巨集,單擊滑鼠...

libiconv使用小例子

最近用到一點轉碼的東西,在網上搜到乙個libiconv,使用了一下感覺還可以,不過還是有一兩處容易犯錯的地方,除錯了半天才搞明白,此處是乙個將utf 8轉換為gbk的小例子 std string convfromutf8 std string s size t inlen s.size const ...