oracle导入 表 卡住了,oracle数据库怎么导入dmp,只导入数据不导入表结构?
使用方法:
Exp parameter_name=value or Exp parameter_name=(value1,value2……)
只要輸入?yún)?shù)help=y就可以看到所有幫助.
EXP常用選項(xiàng)
1.FULL,這個(gè)用于導(dǎo)出整個(gè)數(shù)據(jù)庫(kù),在ROWS=N一起使用時(shí),可以導(dǎo)出整個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。例如:
exp userid=test/test file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
OWNER和TABLE,這兩個(gè)選項(xiàng)用于定義EXP的對(duì)象。OWNER定義導(dǎo)出指定用戶的對(duì)象;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,在導(dǎo)出比較多的數(shù)據(jù)時(shí),我會(huì)考慮設(shè)置這兩個(gè)參數(shù)。例如:
exp userid=test/test file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
4.FILE和LOG,這兩個(gè)參數(shù)分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見(jiàn)上面。
5.COMPRESS參數(shù)不壓縮導(dǎo)出數(shù)據(jù)的內(nèi)容。用來(lái)控制導(dǎo)出對(duì)象的storage語(yǔ)句如何產(chǎn)生。默認(rèn)值為Y,使用默認(rèn)值,對(duì)象的存儲(chǔ)語(yǔ)句的init extent等于當(dāng)前導(dǎo)出對(duì)象的extent的總和。推薦使用COMPRESS=N。
FILESIZE該選項(xiàng)在8i中可用。如果導(dǎo)出的dmp文件過(guò)大時(shí),最好使用FILESIZE參數(shù),限制文件大小不要超過(guò)2G。如:
exp userid=duanl/duanl file=f1,f2,f3,f4,f5 filesize=2G owner=scott
這樣將創(chuàng)建f1.dmp, f2.dmp等一系列文件,每個(gè)大小都為2G,如果導(dǎo)出的總量小于10G
EXP不必創(chuàng)建f5.bmp.
IMP常用選項(xiàng)
1、FROMUSER和TOUSER,使用它們實(shí)現(xiàn)將數(shù)據(jù)從一個(gè)SCHEMA中導(dǎo)入到另外一個(gè)SCHEMA中。例如:假設(shè)我們做exp時(shí)導(dǎo)出的為test的對(duì)象,現(xiàn)在我們想把對(duì)象導(dǎo)入用戶:
imp userid=test1/test1 file=expdat.dmp fromuser=test1 touser=test1
2、IGNORE、GRANTS和INDEXES,其中IGNORE參數(shù)將忽略表的存在,繼續(xù)導(dǎo)入,這個(gè)對(duì)于需要調(diào)整表的存儲(chǔ)參數(shù)時(shí)很有用,我們可以先根據(jù)實(shí)際情況用合理的存儲(chǔ)參數(shù)建好表,然后直接導(dǎo)入數(shù)據(jù)。而GRANTS和INDEXES則表示是否導(dǎo)入授權(quán)和索引,如果想使用新的存儲(chǔ)參數(shù)重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設(shè)為N,而GRANTS一般都是Y。例如:imp userid=test1/test1 file=expdat.dmp fromuser=test1 touser=test1 indexes=N
表空間傳輸
表空間傳輸是8i新增加的一種快速在數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù)的一種辦法,是把一個(gè)數(shù)據(jù)庫(kù)上的格式數(shù)據(jù)文件附加到另外一個(gè)數(shù)據(jù)庫(kù)中,而不是把數(shù)據(jù)導(dǎo)出成Dmp文件,這在有些時(shí)候是非常管用的,因?yàn)閭鬏敱砜臻g移動(dòng)數(shù)據(jù)就象復(fù)制文件一樣快。
關(guān)于傳輸表空間有一些規(guī)則,即:
·源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)必須運(yùn)行在相同的硬件平臺(tái)上。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)必須使用相同的字符集。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)一定要有相同大小的數(shù)據(jù)塊
·目標(biāo)數(shù)據(jù)庫(kù)不能有與遷移表空間同名的表空間
·SYS的對(duì)象不能遷移
·必須傳輸自包含的對(duì)象集
·有一些對(duì)象,如物化視圖,基于函數(shù)的索引等不能被傳輸
可以用以下的方法來(lái)檢測(cè)一個(gè)表空間或一套表空間是否符合傳輸標(biāo)準(zhǔn):
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
如果沒(méi)有行選擇,表示該表空間只包含表數(shù)據(jù),并且是自包含的。對(duì)于有些非自包含的表空間,如數(shù)據(jù)表空間和索引表空間,可以一起傳輸。
以下為簡(jiǎn)要使用步驟,如果想?yún)⒖荚敿?xì)使用方法,也可以參考ORACLE聯(lián)機(jī)幫助。
1.設(shè)置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
alter tablespace app_data read only;
alter tablespace app_index read only;
2.發(fā)出EXP命令
SQL>host exp userid=”””sys/password as sysdba”””
transport_tablespace=y tablespace=(app_data, app_index)
以上需要注意的是
·為了在SQL中執(zhí)行EXP,USERID必須用三個(gè)引號(hào),在UNIX中也必須注意避免“/”的使用
·在816和以后,必須使用sysdba才能操作
·這個(gè)命令在SQL中必須放置在一行(這里是因?yàn)轱@示問(wèn)題放在了兩行)
3.拷貝數(shù)據(jù)文件到另一個(gè)地點(diǎn),即目標(biāo)數(shù)據(jù)庫(kù)
可以是cp(unix)或copy(windows)或通過(guò)ftp傳輸文件(一定要在bin方式)
4.把本地的表空間設(shè)置為讀寫(xiě)
5.在目標(biāo)數(shù)據(jù)庫(kù)附加該數(shù)據(jù)文件
imp file=expdat.dmp userid=”””sys/password as sysdba””” transport_tablespace=y “datafile=(c:tempapp_data,c:tempapp_index)”
6.設(shè)置目標(biāo)數(shù)據(jù)庫(kù)表空間為讀寫(xiě)
alter tablespace app_data read write;
alter tablespace app_index read write;
優(yōu)化EXP/IMP的方法:
當(dāng)需要exp/imp的數(shù)據(jù)量比較大時(shí),這個(gè)過(guò)程需要的時(shí)間是比較長(zhǎng)的,我們可以用一些方法來(lái)優(yōu)化exp/imp的操作。
exp:使用直接路徑 direct=y
oracle會(huì)避開(kāi)sql語(yǔ)句處理引擎,直接從數(shù)據(jù)庫(kù)文件中讀取數(shù)據(jù),然后寫(xiě)入導(dǎo)出文件.
可以在導(dǎo)出日志中觀察到: exp-00067: table xxx will be exported in conventional path
如果沒(méi)有使用直接路徑,必須保證buffer參數(shù)的值足夠大.
有一些參數(shù)于direct=y不兼容,無(wú)法用直接路徑導(dǎo)出可移動(dòng)的tablespace,或者用query參數(shù)導(dǎo)出數(shù)據(jù)庫(kù)子集.
當(dāng)導(dǎo)入導(dǎo)出的數(shù)據(jù)庫(kù)運(yùn)行在不同的os下時(shí),必須保證recordlength參數(shù)的值一致.
imp:通過(guò)以下幾個(gè)途徑優(yōu)化
1.避免磁盤(pán)排序
將sort_area_size設(shè)置為一個(gè)較大的值,比如100M
2.避免日志切換等待
增加重做日志組的數(shù)量,增大日志文件大小.
3.優(yōu)化日志緩沖區(qū)
比如將log_buffer容量擴(kuò)大10倍(最大不要超過(guò)5M)
4.使用陣列插入與提交
commit = y
注意:陣列方式不能處理包含LOB和LONG類型的表,對(duì)于這樣的table,如果使用commit = y,每插入一行,就會(huì)執(zhí)行一次提交.
5.使用NOLOGGING方式減小重做日志大小
在導(dǎo)入時(shí)指定參數(shù)indexes=n,只導(dǎo)入數(shù)據(jù)而忽略index,在導(dǎo)完數(shù)據(jù)后在通過(guò)腳本創(chuàng)建index,指定 NOLOGGING選項(xiàng)
導(dǎo)出/導(dǎo)入與字符集
進(jìn)行數(shù)據(jù)的導(dǎo)入導(dǎo)出時(shí),我們要注意關(guān)于字符集的問(wèn)題。在EXP/IMP過(guò)程中我們需要注意四個(gè)字符集的參數(shù):導(dǎo)出端的客戶端字符集,導(dǎo)出端數(shù)據(jù)庫(kù)字符集,導(dǎo)入端的客戶端字符集,導(dǎo)入端數(shù)據(jù)庫(kù)字符集。
我們首先需要查看這四個(gè)字符集參數(shù)。
查看數(shù)據(jù)庫(kù)的字符集的信息:
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是當(dāng)前數(shù)據(jù)庫(kù)的字符集。
我們?cè)賮?lái)查看客戶端的字符集信息:
客戶端字符集的參數(shù)NLSLANG=< territory >.
language:指定oracle消息使用的語(yǔ)言,日期中日和月的顯示。
Territory:指定貨幣和數(shù)字的格式,地區(qū)和計(jì)算星期及日期的習(xí)慣。
Characterset:控制客戶端應(yīng)用程序使用的字符集。通常設(shè)置或等于客戶端的代碼頁(yè)。或者對(duì)于unicode應(yīng)用設(shè)為UTF8。
在windows中,查詢和修改NLS_LANG可在注冊(cè)表中進(jìn)行:
HKEY_LOCAL_MACHINESOFTWAREOracleHOMExx
xx指存在多個(gè)Oracle_HOME時(shí)的系統(tǒng)編號(hào)。
在unix中:
$ env|grep NLS_LANG
NLS_LANG=simplified chinese_china.ZHS16GBK
修改可用:
$ export NLS_LANG=AMERICAN_AMERICA.UTF8
通常在導(dǎo)出時(shí)最好把客戶端字符集設(shè)置得和數(shù)據(jù)庫(kù)端相同。當(dāng)進(jìn)行數(shù)據(jù)導(dǎo)入時(shí),主要有以下兩種情況:
(1) 源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)具有相同的字符集設(shè)置。
這時(shí),只需設(shè)置導(dǎo)出和導(dǎo)入端的客戶端NLS_LANG等于數(shù)據(jù)庫(kù)字符集即可。
(2) 源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)字符集不同。
先將導(dǎo)出端客戶端的NLS_LANG設(shè)置成和導(dǎo)出端的數(shù)據(jù)庫(kù)字符集一致,導(dǎo)出數(shù)據(jù),然后將導(dǎo)入端客戶端的NLS_LANG設(shè)置成和導(dǎo)出端一致,導(dǎo)入數(shù)據(jù),這樣轉(zhuǎn)換只發(fā)生在數(shù)據(jù)庫(kù)端,而且只發(fā)生一次。
這種情況下,只有當(dāng)導(dǎo)入端數(shù)據(jù)庫(kù)字符集為導(dǎo)出端數(shù)據(jù)庫(kù)字符集的嚴(yán)格超集時(shí),數(shù)據(jù)才能完全導(dǎo)成功,否則,可能會(huì)有數(shù)據(jù)不一致或亂碼出現(xiàn)。
不管新庫(kù)是不是分區(qū),就正常導(dǎo)入,而且你要看新庫(kù)的字符集什么的,上邊的資料僅供參考。收起
總結(jié)
以上是生活随笔為你收集整理的oracle导入 表 卡住了,oracle数据库怎么导入dmp,只导入数据不导入表结构?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HashMap的结构及源码分析
- 下一篇: sql 2008服务器内存一直居高不下_