oracle導入導出命令詳解

oracle導入導出命令詳解EXP導出選項
關鍵字
內容

USERID
運行導出命令的帳號的用戶名/口令

BUFFEER
用來取數據行的緩衝區的大小

FILE
導出轉儲文件的名字

EXP導出選項
關鍵字
內容

USERID
運行導出命令的帳號的用戶名/口令

BUFFEER
用來取數據行的緩衝區的大小

FILE
導出轉儲文件的名字

COMPRESS
導出是否應該壓縮有碎片的段成一個範圍,這將會影響STORAGE子句

GRANTS
導出時否要導出數據庫對象上的授權

INDEXES
是否要導出表上的索引

ROWS
是否應導出行。如它爲‘N’,那麼在導出文件中僅生成數據庫對象的DDL

CONSSTRAINTS
是否導出表舊的約定條件

FULL
如設爲‘Y’,那麼將執行一個整個數據庫導出操作

OWNER
要導出的一系列數據庫帳號,然後執行這些帳號的USER導出操作

TABLES
要導出的一系列表;執行這些表的TABLE導出操作

RECORDLENGTH
轉儲導出文件日誌的長度(以字節爲單位),通常都使用缺省,除非要在兩個不同操作系統中傳遞導出文件

INCTYPE
正在執行的導出操作的類型(有效值有COMPLETE(缺省值),CUMULATIVE和IVCREMENTAL)

RECORD
在增量導出類型中的一個標記,標明是否將日誌存儲到數據字典中日誌導出的表中

PARFILE
要傳遞給導出的參數文件的名字。這個文件將包含所有參數的入口項

ANALYZE
標明是否將移對象的統計信息寫入導出轉儲文件中

CONSISTENT
標明是否保留所有導出對象的讀取一致複製

LOG
導出日誌將要寫入的文件的名字

MLS
標明是否要導出MLS 標號

MLS_LABEL
規定了MLS標號的格式

 


IMP導入選項
關鍵字
內容

USERID
運行導入命令的帳號的用戶名/口令

BUFFEER
用來取數據行的緩衝區的大小

FILE
導入轉儲文件的名字

SHOW
規定文件內容是否被顯示,而不是被執行

EGNORE
標明在執行‘CREATE’命令時,是否忽略遇到的錯誤。如果正在導入的對象已經存在時,應使用這個參數

FULL
如設爲‘Y’,那麼將執行一個整個數據庫導入操作

FROMUSER
在FULL=N的情況下,纔有參數。它是一系列的數據庫帳號,其對象應從導出轉儲文件中讀取

TOUSER
一系列數據庫帳號,導出轉儲文件扣的對象將要導入這些帳號

GRANTS
導入時否要導入數據庫對象上的授權

INDEXES
是否要導入表上的索引

ROWS
是否應導入行。如它爲‘N’,那麼在導入文件中執行數據庫對象的DDL

TABLES
要導入的一系列表

RECORDLENGTH
轉儲導入文件日誌的長度(以字節爲單位),通常都使用缺省,除非要在兩個不同操作系統中傳遞導入文件

INCTYPE
正在執行的導入操作的類型(有效值有COMPLETE(缺省值),CUMULATIVE和IVCREMENTAL)

PARFILE
要傳遞給導入的參數文件的名字。這個文件將包含所有參數的入口項

ANALYZE
標明是否將移對象的統計信息寫入導入轉儲文件中

LOG
導入日誌將要寫入的文件的名字

MLS
標明是否要導入MLS 標號

INDEXFILE
不執行導入動作,只生成建索引的文本
貳:
一. 導出工具 exp
1. 它是操作系統下一個可執行的文件 存放目錄/ORACLE_HOME/bin
   exp導出工具將數據庫中數據備份壓縮成一個二進制系統文件.可以在不同OS間遷移
  
   它有三種模式:
       a.  用戶模式: 導出用戶所有對象以及對象中的數據;
       b.  表模式: 導出用戶所有表或者指定的表;
       c.  整個數據庫: 導出數據庫中所有對象。
2. 導出工具exp交互式命令行方式的使用的例子
$exp [email=test/test123@appdb]test/test123@appdb[/email]
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物理文件的限制及加快壓縮速度和方便刻歷史數據光盤等)
4. 命令參數說明
關鍵字 說明(默認)
---------------------------------------------------
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 將傳輸的表空間列表
二.導入工具 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 [email=username/password@connect_string]username/password@connect_string[/email]
說明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora
   定義的本地或者遠端數據庫的名稱
5.命令參數說明
關鍵字 說明(默認)  
----------------------------------------------
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)
r />FEEDBACK 顯示每 x 行 (0) 的進度
TOID_NOVALIDATE 跳過指定類型 id 的校驗
FILESIZE 各轉儲文件的最大尺寸
RECALCULATE_STATISTICS 重新計算統計值 (N)

下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶
三. unix下oracle數據庫定時備份腳本(按用戶備份)
以下命令可以用crontab方式每天夜裏2點定時執行,腳本最多分30個文件,每個文件大小最大1G的形式將數據庫導出,
如果數據庫數據量很大,多於30G,則會導出不成功,此時只需根據數據量大小調整變量num的值即可。該腳本將數據庫
導出後用gzip進行壓縮,然後保存到系統/data/expfiles,導出之前,會將前一天的備份移到/data/expfiles_bak,
此種備份方式可以保存最近兩天的數據備份。
outfile=`date +%Y%m%d_%H%M`
num=30
i=1
files=
if [ !  -d /data/expfiles ]; then
mkdir /data/expfiles
fi
if [ !  -d /data/expfiles_bak ]; then
mkdir /data/expfiles_bak
fi
dfile=`ls -1 /data/expfiles_bak/|awk '{if ( NR < 2 ) {print $1}}'`
prefix=`echo | awk '{print substr("'"${dfile}"'",1,13)}'`
rm -f /data/expfiles_bak/${prefix}*

dfile=`ls -1 /data/expfiles/|awk '{if ( NR < 2 ) {print $1}}'`
prefix=`echo | awk '{print substr("'"${dfile}"'",1,13)}'`
mv /data/expfiles/${prefix}* /data/expfiles_bak

while [ $i  -lt  $num ]
do
files=$files/data/expfiles/${outfile}_$i.dmp,
i=` expr $i + 1 `
done
files=$files/data/expfiles/${outfile}_$i.dmp
#echo $files
exp [email=userid=user/passwd@acct]userid=user/passwd@acct[/email] FILE=$files filesize=1024M grants=N 2>>exp_rpt.log
gzip /data/expfiles/${outfile}*

 

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章