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