1、基于命令行的数据泵导出步骤
注意:
1、expdp和impdp命令最后不要写";"。由于经常写SQL语句形成习惯,这里请注意。
2、expdp和impdp命令参数较多,可以在DOS下输入C:\expdp help=y来查询参数的相关说明。
--创建目录,同时硬盘上创建该目录
create directory dump_dir as 'E:\baackup';
--SELECT * FROM dba_directories;
--DROP directory dump_dir;
--授予用户操作dump_dir目录的权限
grant read,write on directory dump_dir to scott;
--创建测试用户user1并授权
create user user1 identified by user1;
grant connect,resource to user1;
grant read,write on directory dump_dir to user1;
--导入/导出
/**********表************/
--导出scott用户下的表
C:\>expdp scott/bdqn@smyorcl directory=dump_dir dumpfile=scotttab.dmp tables=emp,dept
--导出scott用户下的表
C:\>impdp scott/bdqn@smyorcl directory=dump_dir dumpfile=scotttab.dmp tables=emp,dept
--将导出的scott用户下的dept和emp表导入到user1用户下
C:\>impdp system/bdqn@smyorcl directory=dump_dir dumpfile=scotttab.dmp tables=emp,dept remap_schema=scott:user1
/**********用户************/
--导出scott用户模式
C:\>expdp scott/bdqn@smyorcl directory=dump_dir dumpfile=scottschema.dmp schemas=scott
--导入scott用户模式
C:\>impdp scott/bdqn@smyorcl directory=dump_dir dumpfile=scottschema.dmp schemas=scott
--将scott中所有对象导入user1中
C:\>impdp system/bdqn@smyorcl directory=dump_dir dumpfile=scottschema.dmp schemas=scott remap_schema=scott:user1
/**********表空间************/
--导出tbs_user01表空间
--tbs_user01表空间必须含有对象
C:\>expdp system/bdqn@smyorcl directory=dump_dir dumpfile=user01tbs.dmp tablespaces=tbs_user01
--导入tbs_user01表空间
C:\>impdp system/bdqn@smyorcl directory=dump_dir dumpfile=user01tbs.dmp tablespaces=tbs_user01
/**********数据库************/
--导出整个数据库
C:\>expdp system/bdqn@smyorcl directory=dump_dir dumpfile=full.dmp full=y
--导入整个数据库
C:\>impdp system/bdqn@smyorcl directory=dump_dir dumpfile=full.dmp full=y
2、基于存储过程的数据泵导入/导出技术
与数据泵的导出一样,使用PL/SQL的程序包DBMS_DATAPUMP也可以启动数据泵的导入/导出过程,虽然比使用命令行麻烦,但更灵活。
PL/SQL导出
DECLARE
--创建数据泵工作句柄
h1 NUMBER;
BEGIN
--建立一个用户定义的数据泵做schema的备份
h1 := dbms_datapump.open(operation => 'EXPORT',job_mode => 'schema');
--定义转储文件
dbms_datapump.add_file(handle => h1,filename => 'TEST3.dmp');
--定义过滤条件
dbms_datapump.metadata_filter(handle => h1,name => 'schema_expr',value => 'in''TEST3''');
--启动数据泵会话
dbms_datapump.start_job(handle => h1);
--断开数据泵会话连接
dbms_datapump.detach(handle => h1);
END;
PL/SQL导入
注意:remote_link属性值orcl_link(数据库链)
create public database link orcl_link
connect to TEST3 identified by bdqn
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
declare
-- 创建数据泵工作句柄
h1 number;
begin
-- 建立一个用户定义的数据泵通过数据泵连接orcl进行访问
h1 := dbms_datapump.open(operation => 'IMPORT',job_mode => 'schema' ,remote_link => 'orcl_link');
-- 把LDS对象模式导入到MYSCHOOL_TEST对象模式中
dbms_datapump.metadata_remap(handle => h1,name => 'REMAP_SCHEMA',old_value => 'TEST3',value => 'TEST4');
-- 将日志写入test2.log文件中
dbms_datapump.add_file(handle => h1,filename => 'abc123.log',filetype => dbms_datapump.KU$_FILE_TYPE_LOG_FILE);
-- 启动数据泵会话
dbms_datapump.start_job(handle => h1);
-- 断开数据泵会话
dbms_datapump.detach(handle => h1);
end;