用exp命令匯出表結構,不匯出表資料。只需在命令列裡加一個參數rows=n即可。表示不匯出表資料。
exp username/pwd@sid file=d:databak.dmp owner=(user)rows=n
********************************************************************************************************************
oracle exp/imp命令詳解
E:>exp help=y
通過輸入 EXP 命令和使用者名稱/口令,您可以
在使用者 / 口令之後的命令:
執行個體: EXP SCOTT/TIGER
或者,您也可以通過輸入跟有各種參數的 EXP 命令來控制“匯出”的運行方式。
要指定參數,您可以使用關鍵字:
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
執行個體: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
USERID 必須是命令列中的第一個參數。
關鍵字 說明(預設)
---------------------------------------------------
USERID 使用者名稱/口令
FULL 匯出整個檔案 (N)
BUFFER 資料緩衝區的大小
OWNER 所有者使用者名稱列表
FILE 輸出檔案 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 匯入一個範圍 (Y)
RECORDLENGTH IO 記錄的長度
GRANTS 匯出許可權 (Y)
INCTYPE 增量匯出類型
INDEXES 匯出索引 (Y)
RECORD 跟蹤增量匯出 (Y)
ROWS 匯出資料行 (Y)
PARFILE 參數檔案名稱
CONSTRAINTS 匯出限制 (Y)
CONSISTENT 交叉表一致性
LOG 螢幕輸出的記錄檔
STATISTICS 分析對象 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 匯出觸發器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
FILESIZE 各轉儲檔案的最大尺寸
QUERY 選定匯出表子集的子句
下列關鍵字僅用於可傳輸的資料表空間
TRANSPORT_TABLESPACE 匯出可傳輸的資料表空間中繼資料 (N)
TABLESPACES 將傳輸的資料表空間列表
E:>imp help=y
可以通過輸入 IMP 命令和您的使用者名稱/口令
跟有您的使用者名稱 / 口令的命令:
執行個體: IMP SCOTT/TIGER
或者, 可以通過輸入 IMP 命令和各種自變數來控制“匯入”按照不同參數。
要指定參數,您可以使用關鍵字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
執行個體: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
USERID 必須是命令列中的第一個參數。
關鍵字 說明(預設)
----------------------------------------------
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 擁有可傳輸資料表空間集中資料的使用者
***************************************************************
Oracle exp/imp匯出匯入工具的使用
一. 匯出工具 exp
1. 它是作業系統下一個可執行檔檔案 存放目錄/ORACLE_HOME/bin
exp匯出工具將資料庫中資料備份壓縮成一個二進位系統檔案.可以在不同OS間遷移
它有三種模式:
a. 使用者模式: 匯出使用者所有對象以及對象中的資料;
b. 表模式: 匯出使用者所有表或者指定的表;
c. 整個資料庫: 匯出資料庫中所有對象。
2. 匯出工具exp互動式命令列方式的使用的例子
$exp oa1/123@oracle
串連到: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
輸入數組提取緩衝區大小: 4096 >
匯出檔案: EXPDAT.DMP > D:/a.dmp
(2)U(使用者), 或 (3)T(表): (2)U > 3
匯出表資料 (yes/no): yes > yes
壓縮區 (yes/no): yes >
已匯出 ZHS16GBK 字元集和 AL16UTF16 NCHAR 字元集
即將匯出指定的表通過常規路徑...
要匯出的表 (T) 或分區 (T: P): (按 RETURN 退出) > pfdept
. . 正在匯出表 PFDEPT匯出了 83 行
要匯出的表 (T) 或分區 (T: P): (按 RETURN 退出) >return
匯出成功終止, 但出現警告。
3. 匯出工具exp非互動式命令列方式的例子
$exp oa1/123@oracle file=D:/all.dmp grants=y
說明:把oa1使用者的所有表匯出到檔案D:/all.dmp
$exp oa1/123@oracle tables=(pfdept,pfuser) file=D:/all.dmp grants=y
說明:把oa1使用者裡兩個表emp,dept匯出到檔案D:/all.dmp
$exp oa1/123@oracle tables=pfdept query="where predeptid=0745" file=D:/all.dmp
說明:在exp裡面加上匯出pfdept 的查詢條件predeptid=0745
$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log
參數檔案username.par內容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
說明:username.par為匯出工具exp用的參數檔案,裡面具體參數可以根據需要去修改
filesize指定產生的二進位備份檔案的最大位元組數
二.匯入工具 imp
1. 它是作業系統下一個可執行檔檔案 存放目錄/ORACLE_HOME/bin
imp匯入工具將EXP形成的二進位系統檔案匯入到資料庫中.
它有三種模式:
a. 使用者模式: 匯出使用者所有對象以及對象中的資料;
b. 表模式: 匯出使用者所有表或者指定的表;
c. 整個資料庫: 匯出資料庫中所有對象。
只有擁有IMP_FULL_DATABASE和DBA許可權的使用者才能做整個資料庫匯入
imp步驟:
(1) create table (2) insert data (3) create index (4) create triggers,constraints
2.匯入工具imp互動式命令列方式的例子
$ imp
Import: Release 10.1.0.2.0 - Production on 星期一 9月 3 08:21:32 2007
Copyright (c) 1982, 2004, Oracle. All rights reserved.
使用者名稱: system
口令:****
串連到: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
匯入檔案: expdat.dmp> D:/all.dmp
輸入插入緩衝區大小(最小為 8192 ) 30720>
經由常規路徑匯出由EXPORT:V08.01.06建立的檔案
警告: 此對象由 TEST 匯出, 而不是目前使用者
已經完成ZHS16GBK字元集和ZHS16GBK NCHAR 字元集中的匯入
只列出匯入檔案的內容(yes/no):no>
由於對象已存在, 忽略建立錯誤(yes/no):no> yes
匯入許可權(yes/no):yes>
匯入表資料(yes/no):yes>
匯入整個匯出檔案(yes/no):no> yes
. 正在將TEST的對象匯入到 SCOTT
. . 正在匯入表 "CMAMENU" 4336行被匯入
成功終止匯入,但出現警告。
3.匯入工具imp非互動式命令列方式的例子
$ imp system/oracle fromuser=oa1 tables=(pfdept)
$ imp system/oracle fromuser=oa1 tables=(pfdept,pfuser)
$ imp system/oracle fromuser=oa1 touser=system
$ imp oa1/123 file = all.dmp full=y
$ imp oa1/123 file = all.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=D:/.log
$ imp oa1/123 parfile=params.dat
params.dat 內容
file=dba.dmp show=n ignore=n grants=y fromuser=oa1 tables=(pfdept,pfuser)
4.匯入工具imp可能出現的問題
(1) 資料庫物件已經存在
一般情況, 匯入資料前應該徹底刪除目標資料下的表, 序列, 函數/過程,觸發器等;
資料庫物件已經存在, 按預設的imp參數, 則會匯入失敗
如果用了參數ignore=y, 會把exp檔案內的資料內容匯入
如果表有唯一關鍵字的約束條件, 不合條件將不被匯入
如果表沒有唯一關鍵字的約束條件, 將引起記錄重複
(2) 資料庫物件有主外鍵約束
不符合主外鍵約束時, 資料會匯入失敗
解決辦法: 先匯入主表, 再匯入依存表
disable目標匯入對象的主外鍵約束, 匯入資料後, 再enable它們
(3) 許可權不夠
如果要把A使用者的資料匯入B使用者下, A使用者需要有imp_full_database許可權
(4) 匯入大表( 大於80M ) 時, 儲存分配失敗
預設的EXP時, compress = Y, 也就是把所有的資料壓縮在一個資料區塊上.
匯入時, 如果不存在連續一個大資料區塊, 則會匯入失敗.
匯出80M以上的大表時, 記得compress= N, 則不會引起這種錯誤.
(5) imp和exp使用的字元集不同
如果字元集不同, 匯入會失敗, 可以改變unix環境變數或者NT註冊表裡NLS_LANG相關資訊.
匯入完成後再改回來.
(6) imp和exp版本不能往上相容
imp可以成功匯入低版本exp產生的檔案, 不能匯入高版本exp產生的檔案
根據情況我們可以用
1 將資料庫TEST完全匯出,使用者名稱system 密碼manager 匯出到D:daochu.dmp中
expsystem/manager@TESTfile=d:daochu.dmp full=y
2 將資料庫中system使用者與sys使用者的表匯出
expsystem/manager@TESTfile=d:daochu.dmp wner=(system,sys)
3 將資料庫中的表table1 、table2匯出
expsystem/manager@TESTfile=d:daochu.dmp tables=(table1,table2)
4 將資料庫中的表table1中的欄位filed1以”00″打頭的資料匯出
expsystem/manager@TESTfile=d:daochu.dmp tables=(table1) query=” where filed1 like '00%'”
上面是常用的匯出,對於壓縮我不太在意,用winzip把dmp檔案可以很好的壓縮。不過在上面命令後面 加上 compress=y 就可以了。
【用 imp 數 據 導 入】:
1 將D:daochu.dmp 中的資料匯入 TEST資料庫中。
相同使用者:
impsystem/manager@TEST file=d:daochu.dmp
不同使用者:
上面可能有點問題,因為有的表已經存在,然後它就報錯,對該表就不進行匯入。
在後面加上 ignore=y 就可以了。
2 將d:daochu.dmp中的表table1 匯入
impsystem/manager@TEST file=d:daochu.dmp tables=(table1)
基本上上面的匯入匯出夠用了。不少情況我是將表徹底刪除,然後匯入。
功能:Oracle資料匯入匯出imp/exp就相當與oracle資料還原與備份。
大多情況都可以用Oracle資料匯入匯出完成資料的備份與還原(不會造成資料的丟失)。
Oracle有個好處,雖然你的電腦不是伺服器,但是你裝了oracle用戶端,並建立了串連
(通過net8 assistant中本地–>服務命名 添加正確的服務命名
其實你可以想成是用戶端與伺服器端修了條路,然後資料就可以被拉過來了)
這樣你可以把資料匯出到本地,雖然可能伺服器離你很遠。
你同樣可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。
利用這個功能你可以構建倆個相同的資料庫,一個用來測試,一個用來正式使用。
執行環境:可以在SQLPLUS.EXE或者DOS(命令列)中執行,
DOS中可以執行時由於 在oracle 8i 中 安裝目錄ora81BIN被設定為全域路徑,
該目錄下有EXP.EXE與IMP.EXE檔案被用來執行匯入匯出。
oracle用java編寫,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個檔案是被封裝後的類檔案。
SQLPLUS.EXE調用EXP.EXE、IMP.EXE他們所包裹的類,完成匯入匯出功能。
注意:
你要有足夠的許可權,許可權不夠它會提示你。
資料庫時可以連上的。可以用tnsping TEST 來獲得資料庫TEST能否連上。
------------------------------------------------------------------------------------------------------------------------------
詳細參考如下:
一. 匯出工具 exp
1. 它是作業系統下一個可執行檔檔案存放目錄/ORACLE_HOME/bin
exp匯出工具將資料庫中資料備份壓縮成一個二進位系統檔案.可以在不同OS間遷移
它有三種模式:
a. 使用者模式: 匯出使用者所有對象以及對象中的資料;
b. 表模式: 匯出使用者所有表或者指定的表;
c. 整個資料庫: 匯出資料庫中所有對象。
2. 匯出工具exp互動式命令列方式的使用的例子
$exp test/test123@appdb
Enter array fetch buffer size: 4096 > 斷行符號
Export file: expdat.dmp >m.dmp 產生匯出的檔案名稱
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3
Export table data (yes/no): yes > 斷行符號
Compress extents (yes/no): yes > 斷行符號
Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set
About to export specified tables via Conventional Path ...
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要匯出的表名
. . exporting table CMAMENU 4336 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要匯出的表名n
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 斷行符號
Export terminated successfully without warnings.
3. 匯出工具exp非互動式命令列方式的例子
$exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y
說明:把scott使用者裡兩個表emp,dept匯出到檔案/directory/scott.dmp
$exp scott/tiger tables=emp query="where job='salesman' and sal<1600" file=/directory/scott2.dmp
說明:在exp裡面加上匯出emp的查詢條件job='salesman' and sal<1600
(但我個人很少這樣用,還是把滿足條件的記錄產生暫存資料表後,再exp會方便一些)
$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log
參數檔案username.par內容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
說明:username.par為匯出工具exp用的參數檔案,裡面具體參數可以根據需要去修改
filesize指定產生的二進位備份檔案的最大位元組數
(可用來解決某些OS下2G物理檔案的限制及加快壓縮速度和方便刻曆史資料光碟片等)
二.匯入工具 imp
1. 它是作業系統下一個可執行檔檔案 存放目錄/ORACLE_HOME/bin
imp匯入工具將EXP形成的二進位系統檔案匯入到資料庫中.
它有三種模式:
a. 使用者模式: 匯出使用者所有對象以及對象中的資料;
b. 表模式: 匯出使用者所有表或者指定的表;
c. 整個資料庫: 匯出資料庫中所有對象。
只有擁有IMP_FULL_DATABASE和DBA許可權的使用者才能做整個資料庫匯入
imp步驟:
(1) create table (2) insert data (3) create index (4) create triggers,constraints
2.匯入工具imp互動式命令列方式的例子
$imp
Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001
(c) Copyright 1999 Oracle Corporation. All rights reserved.
使用者名稱: test
口令:****
串連到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
匯入檔案: expdat.dmp>/tmp/m.dmp
輸入插入緩衝區大小(最小為 8192 ) 30720>
經由常規路徑匯出由EXPORT:V08.01.06建立的檔案
警告: 此對象由 TEST 匯出, 而不是目前使用者
已經完成ZHS16GBK字元集和ZHS16GBK NCHAR 字元集中的匯入
只列出匯入檔案的內容(yes/no):no>
由於對象已存在, 忽略建立錯誤(yes/no):no>yes
匯入許可權(yes/no):yes>
匯入表資料(yes/no):yes>
匯入整個匯出檔案(yes/no):no>yes
. 正在將TEST的對象匯入到 SCOTT
. . 正在匯入表 "CMAMENU" 4336行被匯入
成功終止匯入,但出現警告。
3.匯入工具imp非互動式命令列方式的例子
$ imp system/manager fromuser=jones tables=(accts)
$ imp system/manager fromuser=scott tables=(emp,dept)
$ imp system/manager fromuser=scott touser=joe tables=emp
$ imp scott/tiger file = expdat.dmp full=y
$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log
$ imp system/manager parfile=params.dat
params.dat 內容
file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp)
4.匯入工具imp可能出現的問題
(1) 資料庫物件已經存在
一般情況, 匯入資料前應該徹底刪除目標資料下的表, 序列, 函數/過程,觸發器等;
資料庫物件已經存在, 按預設的imp參數, 則會匯入失敗
如果用了參數ignore=y, 會把exp檔案內的資料內容匯入
如果表有唯一關鍵字的約束條件, 不合條件將不被匯入
如果表沒有唯一關鍵字的約束條件, 將引起記錄重複
(2) 資料庫物件有主外鍵約束
不符合主外鍵約束時, 資料會匯入失敗
解決辦法: 先匯入主表, 再匯入依存表
disable目標匯入對象的主外鍵約束, 匯入資料後, 再enable它們
(3) 許可權不夠
如果要把A使用者的資料匯入B使用者下, A使用者需要有imp_full_database許可權
(4) 匯入大表( 大於80M ) 時, 儲存分配失敗
預設的EXP時, compress = Y, 也就是把所有的資料壓縮在一個資料區塊上.
匯入時, 如果不存在連續一個大資料區塊, 則會匯入失敗.
匯出80M以上的大表時, 記得compress= N, 則不會引起這種錯誤.
(5) imp和exp使用的字元集不同
如果字元集不同, 匯入會失敗, 可以改變unix環境變數或者NT註冊表裡NLS_LANG相關資訊.
匯入完成後再改回來.
(6) imp和exp版本不能往上相容
imp可以成功匯入低版本exp產生的檔案, 不能匯入高版本exp產生的檔案
根據情況我們可以用
$ imp username/password@connect_string
說明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora
定義的本地或者遠端資料庫的名稱
注意事項:
UNIX: /etc/hosts 要定義本地或者遠端資料庫伺服器的主機名稱
win98: windowshosts 和IP地址的對應關係