使用exp和imp命令是oracle對數據進行遷移備份的一種最簡單最常用的一種方式。在此記錄下使用的方法步驟,以備後用。
首先,在老庫上使用命令:
exp userid=username/password@database OWNER=xxx file=xxx.dmp log=xxx.log
其中@後面的database是數據庫連接字符串。可以是ip:port/servicename的形式。例如192.168.1.10:1521/orcl 如果配置了tnsname,那麼@後面可以直接寫配置的tnsname。例如ORCL。
這裏順便說一下使用PL/SQL登錄時,Database文本框中需要填寫的連接字符串的含義。如圖
裏面可以直接填寫在tnsnames.ora中配置的tnsname。例如ORCL。這樣就可以直接根據tnsname來獲取ip、端口號、servicename等值,然後就可以得到連接字符串。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
但是如果沒有在tnsnames.ora中配置的話,而是直接使用PL/SQL來進行連接。那麼這時候就需要在PL/SQL的Database中直接填寫連接字符串了。例如填寫:192.168.1.10:1521/orcl。這兩種方式都是可以的。
這樣經過第一步,dmp文件就已經導出成功了。下面需要的是建立新庫的表空間和owner。
對於表空間,一般情況下在老庫上可以看到。但是如果現在只有一個dmp文件,不知道里面的表空間是什麼,怎麼辦呢。這裏有一個簡單的方法來獲取相關的信息。
就是在新庫上隨便找一個管理員賬戶來執行imp命令導入dmp文件。但是由於OWNER不正確,會導致導入的表和數據會跳過,並不會真正的導入。但是這樣會生成log文件。從log文件中就可以查看出表空間等信息。例如:
imp userid=system/manager file=xxx.dmp full=y ignore=y show=y log=xxx.log
查看相關的log,查看相關的表空間等信息。如果新庫沒有相關的表空間,就需要進行創建表空間。創建命令如下:
CONNECT / AS SYSDBA
CREATE TABLESPACE xxx
DATAFILE 'D:\app\oradata\ORCL\XXX01.DBF'
SIZE 200M
AUTOEXTEND ON NEXT 20M MAXSIZE 4G;
創建好表空間後,然後進行創建用戶:
CREATE USER <user>
IDENTIFIED BY <password>
DEFAULT TABLESPACE xxx;
ALTER USER <user> QUOTA UNLIMITED ON xxx;
GRANT CREATE SESSION TO <user>;
GRANT DBA TO <user>;
然後就可以真正的導入dmp文件了:
imp USERID=<user>/<password> file=xxx.dmp log=xxx.log full=y ignore=y show=y
這樣庫也就遷移成功了。
另外再附上將庫全部刪除的命令:
CONNECT / AS SYSDBA
DROP TABLESPACE xxx INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
DROP USER <user> CASCADE;