使用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>;
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;