資料幫浦主要解決的問題
比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 ...