欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Oracle exp 詳解

系統 1910 0

導入/導出是ORACLE幸存的最古老的兩個命令行工具,其實我從來不認為Exp/Imp是一種好的備份方式,正確的說法是Exp/Imp只能是一個好的轉儲工具,特別是在小型數據庫的轉儲,表空間的遷移,表的抽取,檢測邏輯和物理沖突等中有不小的功勞。當然,我們也可以把它作為小型數據庫的物理備份后的一個邏輯輔助備份,也是不錯的建議。對于越來越大的數據庫,特別是TB級數據庫和越來越多數據倉庫的出現,EXP/IMP越來越力不從心了,這個時候,數據庫的備份都轉向了RMAN和第三方工具。下面說明一下EXP/IMP的使用。
  如何使exp的幫助以不同的字符集顯示:set nls_lang=simplified chinese_china.zhs16gbk,通過設置環境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那么幫助就是英文的了

程序代碼
EXP的所有參數(括號中為參數的默認值):
USERID??????? 用戶名/口令????? 如: USERID=duanl/duanl??????
FULL????????? 導出整個數據庫 (N)
BUFFER??????? 數據緩沖區的大小?????????
OWNER??????? 所有者用戶名列表,你希望導出哪個用戶的對象,就用owner=username
FILE?????????? 輸出文件 (EXPDAT.DMP)????
TABLES??????? 表名列表 ,指定導出的table名稱,如:TABLES=table1,table2
COMPRESS???? 導入一個extent (Y)???
RECORDLENGTH?? IO 記錄的長度
GRANTS??????? 導出權限 (Y)????????????
INCTYPE??????? 增量導出類型
INDEXES??????? 導出索引 (Y)???????????
RECORD??????? 跟蹤增量導出 (Y)
ROWS?????????? 導出數據行 (Y)????????
PARFILE??????? 參數文件名,如果你exp的參數很多,可以存成參數文件.
CONSTRAINTS?? 導出約束 (Y)????
CONSISTENT??? 交叉表一致性
LOG??????????? 屏幕輸出的日志文件????
STATISTICS???? 分析對象 (ESTIMATE)
DIRECT???????? 直接路徑 (N)??????????????
TRIGGERS????? 導出觸發器 (Y)
FEEDBACK????? 顯示每 x 行 (0) 的進度
FILESIZE??????? 各轉儲文件的最大尺寸
QUERY????????? 選定導出表子集的子句
下列關鍵字僅用于可傳輸的表空間
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
TABLESPACES 將傳輸的表空間列表

?

程序代碼
IMP的所有參數(括號中為參數的默認值):
USERID??? 用戶名/口令???????????
FULL????? 導入整個文件 (N)
BUFFER??? 數據緩沖區大小?????????
FROMUSER????? 所有人用戶名列表
FILE????? 輸入文件 (EXPDAT.DMP)????
TOUSER??????? 用戶名列表
SHOW????? 只列出文件內容 (N)
TABLES?????? 表名列表
IGNORE??? 忽略創建錯誤 (N)????
RECORDLENGTH?? IO 記錄的長度
GRANTS?? 導入權限 (Y)??????????
INCTYPE?????? 增量導入類型
INDEXES 導入索引 (Y)??????????
COMMIT??????? 提交數組插入 (N)
ROWS???? 導入數據行 (Y)???????
PARFILE?????? 參數文件名
LOG?????? 屏幕輸出的日志文件???
CONSTRAINTS?? 導入限制 (Y)
DESTROY?? 覆蓋表空間數據文件 (N)
INDEXFILE 將表/索引信息寫入指定的文件
SKIP_UNUSABLE_INDEXES?? 跳過不可用索引的維護 (N)
ANALYZE?? 執行轉儲文件中的 ANALYZE 語句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
TOID_NOVALIDATE?? 跳過指定類型 id 的校驗
FILESIZE 各轉儲文件的最大尺寸
RECALCULATE_STATISTICS 重新計算統計值 (N)
下列關鍵字僅用于可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶


關于增量參數的說明:exp/imp的增量并不是真正意義上的增量,所以最好不要使用。


使用方法:
Exp parameter_name=value or Exp parameter_name=(value1,value2……)
只要輸入參數help=y就可以看到所有幫助.

EXP常用選項
1.FULL,這個用于導出整個數據庫,在ROWS=N一起使用時,可以導出整個數據庫的結構。例如:
exp userid=test/test file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2. OWNER和TABLE,這兩個選項用于定義EXP的對象。OWNER定義導出指定用戶的對象;TABLE指定EXP的table名稱,例如:
exp userid=test/test file=./db_str.dmp log=./db_str.log owner=duanl
exp userid=test/test file=./db_str.dmp log=./db_str.log table=nc_data,fi_arap
3.BUFFER和FEEDBACK,在導出比較多的數據時,我會考慮設置這兩個參數。例如:
exp userid=test/test file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
4.FILE和LOG,這兩個參數分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。
5.COMPRESS參數不壓縮導出數據的內容。用來控制導出對象的storage語句如何產生。默認值為Y,使用默認值,對象的存儲語句的init extent等于當前導出對象的extent的總和。推薦使用COMPRESS=N。
6. FILESIZE該選項在8i中可用。如果導出的dmp文件過大時,最好使用FILESIZE參數,限制文件大小不要超過2G。如:
exp userid=duanl/duanl file=f1,f2,f3,f4,f5 filesize=2G owner=scott
這樣將創建f1.dmp, f2.dmp等一系列文件,每個大小都為2G,如果導出的總量小于10G
EXP不必創建f5.bmp.

I MP常用選項
1、FROMUSER和TOUSER,使用它們實現將數據從一個SCHEMA中導入到另外一個SCHEMA中。例如:假設我們做exp時導出的為test的對象,現在我們想把對象導入用戶:
imp userid=test1/test1 file=expdat.dmp fromuser=test1 touser=test1
2、IGNORE、GRANTS和INDEXES,其中IGNORE參數將忽略表的存在,繼續導入,這個對于需要調整表的存儲參數時很有用,我們可以先根據實際情況用合理的存儲參數建好表,然后直接導入數據。而GRANTS和INDEXES則表示是否導入授權和索引,如果想使用新的存儲參數重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設為N,而GRANTS一般都是Y。例如:imp userid=test1/test1 file=expdat.dmp fromuser=test1 touser=test1 indexes=N

表空間傳輸
???? 表空間傳輸是8i新增加的一種快速在數據庫間移動數據的一種辦法,是把一個數據庫上的格式數據文件附加到另外一個數據庫中,而不是把數據導出成Dmp文件,這在有些時候是非常管用的,因為傳輸表空間移動數據就象復制文件一樣快。
關于傳輸表空間有一些規則,即:
·源數據庫和目標數據庫必須運行在相同的硬件平臺上。
·源數據庫與目標數據庫必須使用相同的字符集。
·源數據庫與目標數據庫一定要有相同大小的數據塊
·目標數據庫不能有與遷移表空間同名的表空間
·SYS的對象不能遷移
·必須傳輸自包含的對象集
·有一些對象,如物化視圖,基于函數的索引等不能被傳輸
可以用以下的方法來檢測一個表空間或一套表空間是否符合傳輸標準:
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
如果沒有行選擇,表示該表空間只包含表數據,并且是自包含的。對于有些非自包含的表空間,如數據表空間和索引表空間,可以一起傳輸。
以下為簡要使用步驟,如果想參考詳細使用方法,也可以參考ORACLE聯機幫助。
1.設置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
alter tablespace app_data read only;
alter tablespace app_index read only;
2.發出EXP命令
SQL>host exp userid=”””sys/password as sysdba”””
transport_tablespace=y tablespace=(app_data, app_index)
以上需要注意的是
·為了在SQL中執行EXP,USERID必須用三個引號,在UNIX中也必須注意避免“/”的使用
·在816和以后,必須使用sysdba才能操作
·這個命令在SQL中必須放置在一行(這里是因為顯示問題放在了兩行)
3.拷貝數據文件到另一個地點,即目標數據庫
?? 可以是cp(unix)或copy(windows)或通過ftp傳輸文件(一定要在bin方式)
4.把本地的表空間設置為讀寫
5.在目標數據庫附加該數據文件
imp file=expdat.dmp userid=”””sys/password as sysdba””” transport_tablespace=y “datafile=(c:\temp\app_data,c:\temp\app_index)”
6.設置目標數據庫表空間為讀寫
alter tablespace app_data read write;
alter tablespace app_index read write;

優化EXP/IMP的方法:
???? 當需要exp/imp的數據量比較大時,這個過程需要的時間是比較長的,我們可以用一些方法來優化exp/imp的操作。
exp:使用直接路徑 direct=y
oracle會避開sql語句處理引擎,直接從數據庫文件中讀取數據,然后寫入導出文件.
可以在導出日志中觀察到: exp-00067: table xxx will be exported in conventional path
???? 如果沒有使用直接路徑,必須保證buffer參數的值足夠大.
???? 有一些參數于direct=y不兼容,無法用直接路徑導出可移動的tablespace,或者用query參數導出數據庫子集.
???? 當導入導出的數據庫運行在不同的os下時,必須保證recordlength參數的值一致.

imp:通過以下幾個途徑優化
1.避免磁盤排序
將sort_area_size設置為一個較大的值,比如100M
2.避免日志切換等待
增加重做日志組的數量,增大日志文件大小.
3.優化日志緩沖區
比如將log_buffer容量擴大10倍(最大不要超過5M)
4.使用陣列插入與提交
commit = y
注意:陣列方式不能處理包含LOB和LONG類型的表,對于這樣的table,如果使用commit = y,每插入一行,就會執行一次提交.
5.使用NOLOGGING方式減小重做日志大小
在導入時指定參數indexes=n,只導入數據而忽略index,在導完數據后在通過腳本創建index,指定 NOLOGGING選項

導出/導入與字符集
???? 進行數據的導入導出時,我們要注意關于字符集的問題。在EXP/IMP過程中我們需要注意四個字符集的參數:導出端的客戶端字符集,導出端數據庫字符集,導入端的客戶端字符集,導入端數據庫字符集。
我們首先需要查看這四個字符集參數。
查看數據庫的字符集的信息:
SQL> select * from nls_database_parameters;
PARAMETER?????????????????????? VALUE
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE??????????????????? AMERICAN
NLS_TERRITORY??????????????????? AMERICA
NLS_CURRENCY??????????????????? $
NLS_ISO_CURRENCY??????????????? AMERICA
NLS_NUMERIC_CHARACTERS????????? .,
NLS_CHARACTERSET??????????????? ZHS16GBK
NLS_CALENDAR??????????????????? GREGORIAN
NLS_DATE_FORMAT???????????????? DD-MON-RR
NLS_DATE_LANGUAGE?????????????? AMERICAN
NLS_SORT????????????????????????? BINARY
NLS_TIME_FORMAT???????????????? HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT??????????? DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT????????????? HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT???????? DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY?????????????? $
NLS_COMP??????????????????????? BINARY
NLS_NCHAR_CHARACTERSET????????? ZHS16GBK
NLS_RDBMS_VERSION?????????????? 8.1.7.4.1
NLS_CHARACTERSET:ZHS16GBK是當前數據庫的字符集。

我們再來查看客戶端的字符集信息:
客戶端字符集的參數NLS_LANG=_< territory >.
language:指定oracle消息使用的語言,日期中日和月的顯示。
Territory:指定貨幣和數字的格式,地區和計算星期及日期的習慣。
Characterset:控制客戶端應用程序使用的字符集。通常設置或等于客戶端的代碼頁?;蛘邔τ趗nicode應用設為UTF8。
在windows中,查詢和修改NLS_LANG可在注冊表中進行:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOMExx\
xx指存在多個Oracle_HOME時的系統編號。

在unix中:
$ env|grep NLS_LANG
NLS_LANG=simplified chinese_china.ZHS16GBK

修改可用:
$ export NLS_LANG=AMERICAN_AMERICA.UTF8

通常在導出時最好把客戶端字符集設置得和數據庫端相同。當進行數據導入時,主要有以下兩種情況:
(1)???? 源數據庫和目標數據庫具有相同的字符集設置。
這時,只需設置導出和導入端的客戶端NLS_LANG等于數據庫字符集即可。
(2)???? 源數據庫和目標數據庫字符集不同。
???? 先將導出端客戶端的NLS_LANG設置成和導出端的數據庫字符集一致,導出數據,然后將導入端客戶端的NLS_LANG設置成和導出端一致,導入數據,這樣轉換只發生在數據庫端,而且只發生一次。
???? 這種情況下,只有當導入端數據庫字符集為導出端數據庫字符集的嚴格超集時,數據才能完全導成功,否則,可能會有數據不一致或亂碼出現。

不同版本的EXP/IMP問題
???? 一般來說,從低版本導入到高版本問題不大,麻煩的是將高版本的數據導入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過下面的方法來解決:
1、在高版本數據庫上運行底版本的catexp.sql;
2、使用低版本的EXP來導出高版本的數據;
3、使用低版本的IMP將數據庫導入到低版本數據庫中;
4、在高版本數據庫上重新運行高版本的catexp.sql腳本。
但在9i中,上面的方法并不能解決問題。如果直接使用低版本EXP/IMP會出現如下錯誤:
EXP-00008: orACLE error %lu encountered
orA-00904: invalid column name
這已經是一個公布的BUG,需要等到Oracle10.0才能解決,BUG號為2261722,你可以到METALINK上去查看有關此BUG的詳細信息。
BUG歸BUG,我們的工作還是要做,在沒有Oracle的支持之前,我們就自己解決。在Oracle9i中執行下面的SQL重建exu81rls視圖即可。
Create or REPLACE view exu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
decode(bitand(r.stmt_type,1), 0,'', 'Select,')
|| decode(bitand(r.stmt_type,2), 0,'', 'Insert,')
|| decode(bitand(r.stmt_type,4), 0,'', 'Update,')
|| decode(bitand(r.stmt_type,8), 0,'', 'Delete,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
from user$ u, obj$ o, rls$ r
where u.user# = o.owner#
and r.obj# = o.obj#
and (uid = 0 or
uid = o.owner# or
exists ( select * from session_roles where role='Select_CATALOG_ROLE')
)
/
grant select on sys.exu81rls to public;
/

可以跨版本的使用EXP/IMP,但必須正確地使用EXP和IMP的版本:
1、總是使用IMP的版本匹配數據庫的版本,如:要導入到817中,使用817的IMP工具。
2、總是使用EXP的版本匹配兩個數據庫中最低的版本,如:從9201往817中導入,則使用817版本的EXP工具。

Oracle exp 詳解


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久久久久久久久久久av | 在线精品小视频 | 精品免费久久久久欧美亚一区 | 国产毛片一级 | 日日夜夜视频 | 一区二区三区成人A片在线观看 | 国产精品久久人妻无码网站蜜臀 | 日本无卡码免费一区二区三区 | 久久久久久久成人 | 天天夜夜骑 | 奇米影音先锋 | 国内精品一区二区三区最新 | 午夜影院免费 | 99中文字幕 | 在线观看亚洲一区 | 精品久久久久久蜜臂a∨ | 精品国产一区三区 | 国产高清片 | 成在线人免费视频 | 精品亚洲永久免费精品 | 欧美成人一区在线 | 国产欧美日韩亚洲精品区2345 | 亚洲色图国产 | 不卡中文一二三区 | www.国产一区 | 成人免费视频网站在线观看 | 91精品国产91久久久久久最新 | 日本视频在线免费观看 | 国产在线日本 | 亚洲欧美日韩精品久久奇米色影视 | 性做久久久 | 亚洲视频在线播放 | 国产精品久久久久久亚洲色 | 美女污视频网站 | 特黄特色大片免费视频观看 | 韩国美女激情视频一区二区 | 蜜臀AV国产精品久久久久 | 在线观看视频亚洲 | 亚洲欧美视频一区 | 特黄特色的免费大片看看 | jyzzjyzzjyzz日本在线观看 |