ORACLE IMP和EXP的使用實驗

wangyiou1988發表於2016-07-25

Exp工具可進行匯出,imp工具進行匯入。

實驗:

pod庫上建立一個使用者a1,建立一個表空間dd,把這個表空間設定成a1的預設表空間。

然後把表空間dd匯出。在另一個庫emrep中,建立相同的使用者a1,將表空間dd再匯入。

SQL>conn sys/oracle@pod as sysdba

SQL>create tablespace dd datafile ‘/u01/app/oracle/oradata/pod/dd.sbf’ size 10M;

SQL>create user a1 identified by a1 default tablespace dd;   dd變成a1的預設表空間

SQL>grant connect,resource to a1;

SQL>create table a1.e as select * from scott.emp;   在表空間下存個表

在匯出表空間的時候,我們匯出的不是資料,而是一些存於system表空間的後設資料,我們要先把表空間置於只讀狀態:

SQL>alter tablespace dd read only;

下面我們開始匯出:

$exp –help   在開始之前我們可以先看一看命令選單:

我們開始:

$ exp \”sys/oracle@pod as sysdba\” file=/u01/app/dd.emp transport_tablespace  tablespaces=dd

注意:這裡我寫錯了,transport_tablespace我沒寫值,應該是transport_tablespace=y,也為以後匯入的時候報錯埋下了伏筆,但這裡也執行成功了,成功生成了匯出檔案。ORACLE IMP和EXP的使用實驗

匯出之後表空間就可以置於讀寫狀態了。

SQL>alter tablespace dd read write;

在原庫中表空間的schema 在目標庫中一定要存在,就是要找到,哪些使用者把dd表空間作為你的預設表空間,要找出來:

SQL>select username from dba_users where default_tablespace=’DD’

還要找哪些使用者建的表在dd表空間上。

SQL>select owner from dba_tables where tablespace_name=’DD’;

還有哪些使用者建的索引建在dd表空間上:

SQL>select owner from dba_indexes where tablespace_name=’DD’;

查詢物件:先找出表空間ddfile_id

SQL>select file#,name from v$datafile;找到之後記下;

SQL>select owner from dba_objects where data_object_id=10;

就找到有沒有其他使用者。

總結:dba_users,dba_tables,dba_indexes 找這三個。

所以我們在目標資料庫只需要建立a1使用者,密碼可以不同:

SQL>conn sys/oracle@emrep as sysdba

SQL>create user a1 identified by a1;

SQL>grant connect,resource to a1;

我們要把DD的資料檔案,和匯出的後設資料檔案dd.emp檔案都挪到目標庫的機器上。

這裡我們可以用scp:
我們開始匯入:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y tablespaces=dd  datafiles=/u01/app/oracle/oradata/emre
p/dd.sbf’
ORACLE IMP和EXP的使用實驗

這裡就開始報錯了。這個說匯入模式和匯出檔案不一樣,我一開始是以為兩個庫的字符集不同,透過nls_database_parameters檢視後發現字符集相同,沒有問題;後來發現原來是匯出的時候transport_tablespace那個引數我空著來著。

馬上,我就在原庫又把表空間置於只讀模式,又重新生成了一份後設資料檔案,這次我加了Y。再次執行:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y  tablespaces=dd  datafiles=/u01/app/oracle/oradata/emrep/dd.sbf’ 
注意:這裡的路徑一定要用絕對路徑,千萬不要用相對路徑,要不然會報錯。
ORACLE IMP和EXP的使用實驗

再一次報錯,我分析是重新匯入的後設資料比較新,而用的資料檔案 還是老的資料檔案,兩個不同步,所以我又把datafile檔案重新scp了一下。注意:這時我的表空間還是隻讀模式,我又把這個最新的表空間檔案SCP到了EMREP庫,然後才把它置於讀寫模式:

這次我們再執行:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y  tablespaces=dd  datafiles=/u01/app/oracle/oradata/emrep/dd.sbf’

ORACLE IMP和EXP的使用實驗

下面介紹exp/imp的關於使用者的物件的匯入和匯出:

1.       只匯出使用者的一張表。

2.       把一個使用者下的所有物件匯出。

3.       把一個使用者下的所有物件匯入到另外一個使用者裡。

我們建立兩個使用者u1,u2, u1上面建立兩個表t1,t2,在u2上建立兩個表p1p2.

SQL>conn / as sysdba

SQL>create user u1 identified by u1;

SQL>grant resource,connect to u1;

SQL>conn u1/u1

SQL>create table t1(id number,name varchar2(20);

SQL>insert into t1 values(1,’wang’)

SQL>commit;

SQL>create table t2(id number,name varchar2(20);

SQL>insert into t2 values(2,’you’)

SQL>commit;

SQL>create user u2 identified by u2;

SQL>grant resource,connect to u2;

SQL>conn u2/u2

SQL>create table p1(id number,name varchar2(20);

SQL>insert into p1values(1,’oo’)

SQL>commit;

1.下面我們來做把u1下的表t1匯出,檔案是u1.dmp.

$exp u1/u1 file=u1.dmp tables=t1


ORACLE IMP和EXP的使用實驗

2.我們來做把u1使用者下的所有的物件都匯出,匯出之後檔案是u1.alldmp

$exp u1/u1 file=u1.alldmp owner=u1

ORACLE IMP和EXP的使用實驗


ORACLE IMP和EXP的使用實驗


ORACLE IMP和EXP的使用實驗



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25116248/viewspace-2122538/,如需轉載,請註明出處,否則將追究法律責任。

相關文章