oracle自带的数据备份还原工具,使用Oracle自带工具实现数据库备份与迁移(四)

才疏学浅,欢迎批评指正

文章目录

1.使用Oracle的数据泵(expdp/impdp)实现数据库的备份与迁移实战总结

2.使用Oracle的数据泵(expdp/impdp)结合DB_LINK实现数据库的备份与迁移实战总结

3.关于数据泵与DBlink的其他总结

关于数据泵的相关语法可见

https://blog.csdn.net/xinxindiandeng9789/article/details/88198204

1.使用Oracle的数据泵(expdp/impdp)实现数据库的备份与迁移实战总结

场景: 需要将源库中的数据迁移到目标库中,事前已将源库的库表结构(包括表的约束、表的外键等)和一些小表导入目标库中,几张大表需要使用数据泵

fe67a439bf21d62db100150fb8c137eb.png

1.1从源库中迁出数据(在源库的数据库服务器上操作或者远程操作)

给sourceUSER用户申请使用expdp的权限(exp_full_database)

grant exp_full_database to sourceUSER;

给sourceUSER用户授予exp_full_database权限

grant exp_full_database to 用户名;

创建导出文件目录

create or replace directory expdp_dir as‘H:\datadmp’;

创建目录expdp_dir

create or replace directory 目录名 as‘文件所在位置’;

grant read, write on directory expdp_dir to sourceUSER;

授予 sourceUSER用户对 expdp_dir目录的读写权限

grant read, write on directory 目录名 to 用户名;

将数据从源库sourceDB中迁出

expdp sourceUSER/sourecePASS tables=sourceUSER.table1 directory=expdp_dir dumpfile=expdpdata content=ALL JOB_NAME= expdptable1 logfile = table1expdp.log

将sourceUSER用户的table1表导出(包括表结构、表约束、外键),数据文件为expdpdata,数据文件存放在expdp_dir 下,作业名指定为expdptable1,日志文件为table1expdp.log

expdp 用户名/密码 tables=用户名.表名 directory=目录名 dumpfile=导出文件名称 content=ALL JOB_NAME= 作业名 logfile = 日志文件

1.2将导出的数据文件存入外部存储设备,至此完成了数据库的备份,若需要迁库,则继续1.3

1.3将数据导入目标库中(在目标库的数据库服务器上操作或者远程操作)

给targetUSER用户申请使用impdp的权限(imp_full_database)

grant imp_full_database to targetUSER;

给targetUSER用户授予imp_full_database 权限

grant imp_full_database to 用户名;

创建导入文件目录,并放入将先前导出的数据文件

create or replace directory impdp_dir as‘H:\datadmp’;

**创建目录impdp_dir **

create or replace directory 目录名 as‘文件所在位置’;

grant read, write on directory impdp_dir to targetUSER;

授予 targetUSER用户对 impdp_dir 目录的读写权限

grant read, write on directory 目录名 to 用户名;

禁用约束与外键(最好在plsql之类的软件中执行)

形成禁用约束的sql语句

set heading off

select ‘alter table ‘||table_name||’ disable constraint ‘||constraint_name||’;’ from user_constraints;

执行禁用约束的sql语句

alter table table_name disable constraint constraint_name;

形成禁用外键的sql语句

set heading off

select ‘alter trigger ‘||trigger_name||’ disable;’ from user_triggers;

执行禁用外键的sql语句

alter trigger trigger_name disable;

将数据导入targetDB中

impdp targetUSER/targetPASS directory = impdp_dir dumpfile=expdpdata tables=sourceUSER.table1 remap_tablespace=sourceTableSpace:targetTableSpace remap_schema =sourceUSER:targetUSER table_exists_action = truncate content = DATA_ONLY JOB_NAME= impdptable1 logfile = impdplog.log

导入tables_dir 路径下的 expdpdata数据文件中用户sourceUSER下的table1,同时将表空间由原来的sourceTableSpace替换为targetTableSpace ,用户由sourceUSER替换为targetUSER,如果table1在目标数据库中存在,执行截断操作,并且只导入表中数据,作业名指定为impdptable1,日志文件为impdplog.log

impdp 目标库用户名/目标库用户密码 directory =路径名 dumpfile=导入文件名 tables=源库用户名.表名 remap_tablespace=源库表空间:目标库表空间 remap_schema =源库用户名:目标库用户名 table_exists_action = truncate content = DATA_ONLY JOB_NAME= 作业名 logfile = 日志文件

启用约束与外键(最好在plsql之类的软件中执行)

形成启用约束的sql语句

set heading off

select ‘alter table ‘||table_name||’ enable novalidate constraint ‘||constraint_name||’;’ from user_constraints;

执行启用约束的sql语句

alter table table_name enable novalidate constraint constraint_name;

形成启用外键的sql语句

set heading off

select ‘alter trigger ‘||trigger_name||’ enable;’ from user_triggers;

执行启用外键的sql语句

alter trigger trigger_name enable;

至此完成使用数据库的迁库

2.使用Oracle的数据泵(expdp/impdp)结合DB_LINK实现数据库的备份与迁移实战总结

场景: 需要将源库中的数据迁移到目标库中,事前已将源库的库表结构(包括表的约束、表的外键等)和一些小表导入目标库中,几张大表需要使用数据泵,但无法直接操作数据所在服务器,但有一台机器可以访问源库与目标库,同时在该机器上可以安装数据库

56b71913eec3465b0f2ffb2c727ba6b0.png

2.1给源库和目标库用户授予使用数据泵的权限

给sourceUSER用户申请使用expdp的权限(exp_full_database)

grant exp_full_database to sourceUSER;

给sourceUSER用户授予exp_full_database权限

grant exp_full_database to 用户名;

给targetUSER用户申请使用impdp的权限(imp_full_database)

grant imp_full_database to targetUSER;

给targetUSER用户授予imp_full_database 权限

grant imp_full_database to 用户名;

禁用目标库上的约束、外键(见1.3)

2.2从源库中将数据导出至中间库所在机器,在移至目标库中(在中间库的机器上执行)

给MiddleUSER授予创建DBlink的权限,并创建链接sourceDB的link

grant create public database link to MiddleUSER

给MiddleUSER授予创建db_link的权限

grant create public database link to 数据库用户名

create public database link link2source connect to sourceUSER identified by soucePASS by using ‘10.196.83.53/sourceDB’

在用户MiddleUSER下, 使用用户sourceUSER ,创建名为link2source的远程连接,连接到sourceDB上

create public database link 链接名 connect to 源数据库用户名 identified by 源数据库用户对应的密码 by using ‘源数据库地址/SID’

从源库导出数据

expdp MiddleUSER/MiddlePASS network_link = link2source tables = sourceUSER .table1 dumpfile = expdpdata content=ALL JOB_NAME= expdptable1 logfile = table1expdp.log

利用link2source, 将sourceUSER用户的table1表导出(包括表结构、表约束、外键),数据文件为expdpdata,作业名指定为expdptable1,日志文件为table1expdp.log

expdp 中间库用户名/密码 network_link= 连接名 tables=用户名.表名 directory=目录名 dumpfile=导出文件名称 content=ALL JOB_NAME= 作业名 logfile = 日志文件

2.3在中间库所在机器,将数据导入目标库中(在中间库的机器上执行)

MiddleUSER创建链接targetDB的link

create public database link link2target connect to targetUSER identified by targetPASS by using ‘10.196.83.55/targetDB’

在用户MiddleUSER下, 使用用户targetUSER ,创建名为link2source的远程连接,连接到targetDB上

create public database link 链接名 connect to 目标数据库用户名 identified by 目标数据库用户对应的密码 by using ‘目标数据库地址/SID’

将数据导入目标库中

impdp MiddleUSER/MiddlePASS network_link = link2source dumpfile=expdpdata tables= sourceUSER.table1 remap_tablespace = sourceTableSpace: targetTableSpace remap_schema =sourceUSER:targetUSER table_exists_action = truncate content = DATA_ONLY JOB_NAME= impdptable1 logfile = impdplog.log

利用link2target,将 expdpdata数据文件中用户sourceUSER下的table1,同时将表空间由原来的sourceTableSpace替换为targetTableSpace ,用户由sourceUSER替换为targetUSER,如果table1在目标数据库中存在,执行截断操作,并且只导入表中数据,作业名指定为impdptable1,日志文件为impdplog.log

impdp 中间库用户名/中间库用户密码 network_link = 链接名 dumpfile=导入文件名 tables=源库用户名.表名 remap_tablespace=源库表空间:目标库表空间 remap_schema =源库用户名:目标库用户名 table_exists_action = truncate content = DATA_ONLY JOB_NAME= 作业名 logfile = 日志文件

启用目标库上的约束、外键(见1.3)

2.4放弃创建的dblink (在中间库的机器上执行)

放弃使用到的dblink

drop public database link link2source ;

drop public database link link2target;

放弃link2source,link2target

drop public database link 连接名

3.关于数据泵与DBlink的其他总结

3.1关于数据泵

数据泵在命令行下直接使用(退出sqlplus)

使用数据泵时可以不关闭约束,但要注意表的导入顺序,不然会报错

在windows系统下dumpfile参数后的文件名可以不加dmp后缀,但在linux下需要加上dmp后缀,否则 可能 会报错

查看数据泵任务

select * from dba_datapump_jobs;

中断数据泵任务( 在命令行下按)

ctrl+c

恢复数据泵任务(命令行下输入 )

expdp ATTACH=expdptable1

impdp ATTACH=impdptable1

继续expdptable1或impdptable1作业

expdp/ impdp ATTACH=作业名

3.2关于dblink

public database link 与 database link的区别

创建的DBlink是否共所有用户使用(加上public 则为所有用户)

查看所有连接

select * from dba_db_links

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值