登錄到 這臺(tái)LINUX的數(shù)據(jù)庫(kù)服務(wù)器。
創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷(xiāo)型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷(xiāo)型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了做網(wǎng)站、成都做網(wǎng)站服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
建好 表空間及用戶后,就可以開(kāi)始導(dǎo)入工作。
例如 abc.dmp 用戶名是 abc,密碼是 abc,DMP文件也是 abc
那么命令是: imp abc/abc file=abc.dmp full=y
exp help=y
imp help=y
說(shuō)的很清楚
數(shù)據(jù)庫(kù)歸檔不歸檔都可以,scott是一個(gè)用戶名,tiger是這個(gè)用戶的密碼,舉兩個(gè)例子
exp scott/tiger owner=scott file=temp.dmp log=temp.log
exp scott/tiger tables=(emp,dept) file=temp.dmp log=temp.log
最好先建立表空間,然后執(zhí)行 exp system/manager@TEST file=d:\daochu.dmp full=y 然后在 imp system/manager@TEST file=d:\daochu.dmp
EXP/IMP備份(導(dǎo)出/導(dǎo)入備份)
exp hely=y 說(shuō)明:
USERID 用戶名/口令
FULL 導(dǎo)出整個(gè)文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)的大小
OWNER 所有者用戶名列表
FILE 輸出文件 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 導(dǎo)入一個(gè)范圍 (Y)
RECORDLENGTH IO 記錄的長(zhǎng)度
GRANTS 導(dǎo)出權(quán)限 (Y)
INCTYPE 增量導(dǎo)出類型
INDEXES 導(dǎo)出索引 (Y)
RECORD 跟蹤增量導(dǎo)出 (Y)
ROWS 導(dǎo)出數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
CONSTRAINTS 導(dǎo)出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕輸出的日志文件
STATISTICS 分析對(duì)象 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 導(dǎo)出觸發(fā)器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
QUERY 選定導(dǎo)出表子集的子句
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將傳輸?shù)谋砜臻g列表
imp hely=y 說(shuō)明:
USERID 用戶名/口令
FULL 導(dǎo)入整個(gè)文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)大小
FROMUSER 所有人用戶名列表
FILE 輸入文件 (EXPDAT.DMP)
TOUSER 用戶名列表
SHOW 只列出文件內(nèi)容 (N)
TABLES 表名列表
IGNORE 忽略創(chuàng)建錯(cuò)誤 (N)
RECORDLENGTH IO 記錄的長(zhǎng)度
GRANTS 導(dǎo)入權(quán)限 (Y)
INCTYPE 增量導(dǎo)入類型
INDEXES 導(dǎo)入索引 (Y)
COMMIT 提交數(shù)組插入 (N)
ROWS 導(dǎo)入數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
LOG 屏幕輸出的日志文件
CONSTRAINTS 導(dǎo)入限制 (Y)
DESTROY 覆蓋表空間數(shù)據(jù)文件 (N)
INDEXFILE 將表/索引信息寫(xiě)入指定的文件
SKIP_UNUSABLE_INDEXES 跳過(guò)不可用索引的維護(hù) (N)
ANALYZE 執(zhí)行轉(zhuǎn)儲(chǔ)文件中的 ANALYZE 語(yǔ)句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
TOID_NOVALIDATE 跳過(guò)指定類型 id 的校驗(yàn)
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
RECALCULATE_STATISTICS 重新計(jì)算統(tǒng)計(jì)值 (N)
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導(dǎo)入可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將要傳輸?shù)綌?shù)據(jù)庫(kù)的表空間
DATAFILES 將要傳輸?shù)綌?shù)據(jù)庫(kù)的數(shù)據(jù)文件
TTS_OWNERS 擁有可傳輸表空間集中數(shù)據(jù)的用戶
導(dǎo)入注意事項(xiàng):
(1) 數(shù)據(jù)庫(kù)對(duì)象已經(jīng)存在
一般情況, 導(dǎo)入數(shù)據(jù)前應(yīng)該徹底刪除目標(biāo)數(shù)據(jù)下的表, 序列, 函數(shù)/過(guò)程,觸發(fā)器等;
數(shù)據(jù)庫(kù)對(duì)象已經(jīng)存在, 按缺省的imp參數(shù), 則會(huì)導(dǎo)入失敗
如果用了參數(shù)ignore=y, 會(huì)把exp文件內(nèi)的數(shù)據(jù)內(nèi)容導(dǎo)入
如果表有唯一關(guān)鍵字的約束條件, 不合條件將不被導(dǎo)入
如果表沒(méi)有唯一關(guān)鍵字的約束條件, 將引起記錄重復(fù)
(2) 數(shù)據(jù)庫(kù)對(duì)象有主外鍵約束
不符合主外鍵約束時(shí), 數(shù)據(jù)會(huì)導(dǎo)入失敗
解決辦法: 先導(dǎo)入主表, 再導(dǎo)入依存表
disable目標(biāo)導(dǎo)入對(duì)象的主外鍵約束, 導(dǎo)入數(shù)據(jù)后, 再enable它們
(3) 權(quán)限不夠
如果要把A用戶的數(shù)據(jù)導(dǎo)入B用戶下, A用戶需要有imp_full_database權(quán)限
(4) 導(dǎo)入大表( 大于80M ) 時(shí), 存儲(chǔ)分配失敗
默認(rèn)的EXP時(shí), compress = Y, 也就是把所有的數(shù)據(jù)壓縮在一個(gè)數(shù)據(jù)塊上.
導(dǎo)入時(shí), 如果不存在連續(xù)一個(gè)大數(shù)據(jù)塊, 則會(huì)導(dǎo)入失敗.
導(dǎo)出80M以上的大表時(shí), 記得compress= N, 則不會(huì)引起這種錯(cuò)誤.
(5) imp和exp使用的字符集不同
如果字符集不同, 導(dǎo)入會(huì)失敗, 可以改變unix環(huán)境變量或者NT注冊(cè)表里NLS_LANG相關(guān)信息.
導(dǎo)入完成后再改回來(lái).
(6) imp和exp版本不能往上兼容
imp可以成功導(dǎo)入低版本exp生成的文件, 不能導(dǎo)入高版本exp生成的文件
使用方法:
例題格式及說(shuō)明:
1.普通數(shù)據(jù)庫(kù)全部導(dǎo)出和導(dǎo)入
exp 用戶/密碼@dbName file=路徑.dmp full=y --還有其他的參數(shù),看需要進(jìn)行填寫(xiě)
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y --全部導(dǎo)出
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2 --全部導(dǎo)入
2.指定用戶全部導(dǎo)出
/home/oracle/product/9.2.0.4/bin/exp userid=用戶/密碼 --說(shuō)明:本地的數(shù)據(jù)庫(kù)登入(可以指定其他數(shù)據(jù)庫(kù),則需添加@dbName)
owner=導(dǎo)出的用戶名 file=導(dǎo)出路徑存放目錄.dmp log=導(dǎo)出的日志信息.log --主要:這是不能使用full=y或則會(huì)出錯(cuò)(默認(rèn)該用戶全導(dǎo)出)
3.文件參數(shù)導(dǎo)出
$ exp parfile=username.par // 在參數(shù)文件中輸入所需的參數(shù)
參數(shù)文件username.par 內(nèi)容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
file=/oracle/test.dmp
full=y
4.制定表導(dǎo)出(分區(qū)表導(dǎo)出及條件表導(dǎo)出)
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2 --或tables(table1,table2,.....)
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=(T1: table1,T2: table2,.....) --T1是分區(qū)表
$ exp scott/tiger tables=emp query=/"where job=/'salesman/' and sal/1600/" file=/directory/scott2.dmp 或根據(jù)參數(shù)文件進(jìn)行導(dǎo)出
5.導(dǎo)入(一張或多張表)
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=(table1,table2) fromuser=dbuser
touser=dbuser2 commit=y ignore=y
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
commit=y ignore=y
6.只導(dǎo)出數(shù)據(jù)對(duì)象不導(dǎo)出數(shù)據(jù)
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n --rows=n/y說(shuō)明是否導(dǎo)出數(shù)據(jù)行
7.分割多個(gè)文件導(dǎo)出和導(dǎo)入
$ exp user/pwd file=1.dmp,2.dmp,3.dmp,… filesize=1000m log=xxx.log full=y
$ imp user/pwd file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=xxx fromuser=dbuser
touser=dbuser2 commit=y ignore=y
8.增量導(dǎo)出和導(dǎo)入
a.完全增量導(dǎo)出(inctype=complete) // 備份整個(gè)數(shù)據(jù)庫(kù)
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete
b.增量型增量導(dǎo)出 導(dǎo)出上一次備份后改變的數(shù)據(jù)(inctype=incremental)。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental
c.累計(jì)型增量導(dǎo)出(Cumulative) 只導(dǎo)出自上次"完全"導(dǎo)出之后數(shù)據(jù)庫(kù)中變化的信息。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative
d.增量導(dǎo)入:
$ imp usr/pwd FULL=y inctype=system/restore/inctype --(SYSTEM: 導(dǎo)入系統(tǒng)對(duì)象,RESTORE: 導(dǎo)入所有用戶對(duì)象)
9.使用sysdba進(jìn)行導(dǎo)出和導(dǎo)入
1. 命令行方式:
A: Windows平臺(tái):
C:/ exp 'sys/sys@instance as sysdba' tables=scott.emp file=e:/emp.dmp
B: Unix Linux平臺(tái)(這時(shí)的"'"需要用到轉(zhuǎn)義字符"/"):
$ exp /'sys/change_on_install@instance as sysdba/' tables=scott.emp file=/home/oracle/emp.dmp
C: 表空間導(dǎo)入和導(dǎo)出
$ imp /'usr/pwd@instance as sysdba/' tablespaces=xx transport_tablespace=y
file=xxx.dmp datafiles=xxx.dbf
2. 交互輸入方式:
exp tables=scott.emp --不輸入連接字符串,直接回車(chē)
Export: Release 10.2.0.3.0 - Production on Fri Jun 25 07:39:46 2004 Copyright (c) 1982, 2005, Oracle. All rights reserved.
Username: sys/change_on_install@instance as sysdba --輸入連接字符串.
3.如果是寫(xiě)在參數(shù)文件中,則連接字符串需要用雙引號(hào)了:USERID="sys/change_on_install@instance as sysdba"
10.表空間傳輸(建議:10g以上使用,但我試了在9i沒(méi)有找到相對(duì)應(yīng)的檢查表空是否傳輸?shù)恼Z(yǔ)句,10g 支持跨平臺(tái)的表空間傳輸)
注意:
l.索引在待傳輸表空間集中而表卻不在。(注意,如果表在待傳輸表空間集中,而索引不在并不違反自包含原則,當(dāng)然如果你堅(jiān)持這樣傳輸?shù)脑?,?huì)造成目標(biāo)庫(kù)中該表索引丟失)。
2.分區(qū)表中只有部分分區(qū)在待傳輸表空間集(對(duì)于分區(qū)表,要么全部包含在待傳輸表空間集中,要么全不包含)。
3.待傳輸表空間中,對(duì)于引用完整性約束,如果約束指向的表不在待傳輸表空間集,則違反自包含約束;但如果不傳輸該約束,則與約束指向無(wú)關(guān)。
4.對(duì)于包含LOB列的表,如果表在待傳輸表空間集中,而Lob列不在,也是違反自包含原則的。
a.查看表空間包含那些XML文件
select distinct p.tablespace_name
from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t
where t.table_name = x.table_name
and t.tablespace_name = p.tablespace_name
and x.owner = u.username
b.檢測(cè)一個(gè)表空間是否符合傳輸標(biāo)準(zhǔn)的方法:
SQL exec sys.dbms_tts.transport_set_check('tablespace_name',true);
SQL select * from sys.transport_set_violations;
c.簡(jiǎn)要使用步驟
1.設(shè)置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
SQL alter tablespace app_data read only;
SQL alter tablespace app_index read only;
2.發(fā)出EXP 命令
SQL host exp userid='''sys/password as sysdba''' transport_tablespace=y
tablespaces=(app_data, app_index)
以上需要注意的是:(或則參考我自己寫(xiě)的 表空間導(dǎo)入和導(dǎo)出例題)
·為了在SQL中執(zhí)行EXP,USERID 必須用三個(gè)引號(hào),在UNIX 中也必須注意避免"/"的使用
·在816 和以后,必須使用sysdba 才能操作
·這個(gè)命令在SQL中必須放置在一行(這里是因?yàn)轱@示問(wèn)題放在了兩行)
3.拷貝.dbf數(shù)據(jù)文件(以及.dmp 文件)到另一個(gè)地點(diǎn),即目標(biāo)數(shù)據(jù)庫(kù)可以是cp(unix)或copy(windows)或通過(guò)ftp 傳輸文件(一定要在bin方式)
4.把本地的表空間設(shè)置為讀寫(xiě)
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
5.在目標(biāo)數(shù)據(jù)庫(kù)附加該數(shù)據(jù)文件 (直接指定數(shù)據(jù)文件名)
(表空間不能存在,必須建立相應(yīng)用戶名或者用fromuser/touser)
$ imp file=expdat.dmp userid=”””sys/password as sysdba”””
transport_tablespace=y datafiles=(“c:/app_data.dbf,c:/app_index.dbf”)
tablespaces=app_data,app_index tts_owners=hr,oe
6.設(shè)置目標(biāo)數(shù)據(jù)庫(kù)表空間為讀寫(xiě)
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
11.優(yōu)化IMP/EXP的速度(修改參數(shù)配置文件)
EXP:
加大large_pool_size,可以提高exp 的速度
采用直接路徑的方式(direct=y),數(shù)據(jù)不需要經(jīng)過(guò)內(nèi)存進(jìn)行整合和檢查.
設(shè)置較大的buffer,如果導(dǎo)出大對(duì)象,小buffer 會(huì)失敗。
export文件不在ORACLE 使用的驅(qū)動(dòng)器上,不要export到NFS 文件系統(tǒng)
UNIX環(huán)境:用管道模式直接導(dǎo)入導(dǎo)出來(lái)提高imp/exp 的性能
IMP:
建立一個(gè)indexfile,在數(shù)據(jù)import完成后在建立索引
將import 文件放在不同的驅(qū)動(dòng)器上
增加DB_BLOCK_BUFFERS
增加LOG_BUFFER
用非歸檔方式運(yùn)行ORACLE:ALTER DATABASE NOARCHIVELOG;
建立大的表空間和回滾段,OFFLINE 其他回滾段,回滾段的大小為最大表的1/2
使用 COMMIT=N
使用ANALYZE=N
單用戶模式導(dǎo)入
UNIX環(huán)境:用管道模式直接導(dǎo)入導(dǎo)出來(lái)提高imp/exp 的性能
12.通過(guò)unix/Linux PIPE管道加快exp/imp速度
步驟如下:
通過(guò)管道導(dǎo)出數(shù)據(jù):
1.通過(guò)mknod -p 建立管道
$ mknod /home/exppipe p // 在目錄/home下建立一個(gè)管道exppipe注意參數(shù)p
2.通過(guò)exp 和gzip 導(dǎo)出數(shù)據(jù)到建立的管道并壓縮
$ exp test/test file=/home/exppipe gzip /home/exppipe exp.dmp.gz
$ exp test/test tables=bitmap file=/home/newsys/test.pipe
gzip /home/newsys/test.pipe bitmap.dmp.gz
3.導(dǎo)出成功完成之后刪除建立的管道
$ rm -rf /home/exppipe
4.shell腳本可以這樣寫(xiě)(我只是寫(xiě)主要的)
unix下:
mkfifo /home/exp.pipe
chmod a+rw exp.pipe
compress exp.pipe exp.dmp.Z
su -u oracle -c "exp userid=ll/ll file=/home/exp.pipe full=y buffer=20000000"
rm exp.pipe
linux下:
mknod /home/exppipe p
$ imp test/test file=/home/exppipe fromuser=test touser=macro
gunzip exp.dmp.gz /home/exppipe
$ rm –fr /home/exppipe