记录一次用expdp定时远程导出数据
中间图片过程不再赘述,不附图片记录,网上有很多博客、帖子等相关的有很多,写的内容也很多。我简单的罗列我正确操作的步骤记录
1 、服务器数据库上不用设置任何东西,当然可以建一个export的用户,密码 ABC123 赋予dba权限,用于创建link里面指向的用户,也可以用服务器上其它拥有DBA权限的用户,不能是sys用户。
2、在本地用dbnet 或者直接改tnsnane.ora,建立一个指向服务器的网络连接服务名ORCL_LJYWQ。
3、在本地数据库上建立一个表空间temp1,建立一个用uer1,密码 ABC123,赋予DBA权限。
create tablespace temp1 datafile 'D:\temp1.dbf';
create user user1 identified by ABC123 default tablespace temp1;
grant dba to user1;
4、在本地数据库用uer1建立public db_link指向服务器数据库(注意是public)。
create public database link LJ_YWQ
connect to export identified by ABC123
using 'ORCL_LJYWQ';
5、在本地服务器用uer1建立一个directory命名kkk。
create directory kkk as 'D:\backup';
grant read,write on directory backup to uer1;
6、在本地服务器用sys用户给uer1赋予导出权限(很重要)。
GRANT exp_full_database TO uer1;
7、测试link是否正确。
select * from export.table@LJ_YWQ where rownum<10;
8、在本地测试执行导出命令,(schemas 后面指定要导出哪些模式下的数据,可以多个,用,分开即可。)cmd下执行。
expdp uer1/ABC123 network_link='LJ_YWQ' directory=KKK dumpfile=dc_ywk.dmp schemas=export
9、无错误之后可以写成bat可执行文件,本地多实例需要加参数指定实例。
以下是bat脚本内容
@echo off
set tempsql=%backup_path%\temp.sql
set backup_path=D:\backup
if exist %backup_path% goto go_1
if not exist %backup_path% goto go_2
:go_1
@echo 勿关闭此窗口,完成后自动关闭
rem 设置时间连接的字符串,做文件夹名
set h=%time:~0,2%
set h=%h: =0%
set backup_package=%date:~0,4%年%date:~5,2%月%date:~8,2%日%h%时%time:~3,2%分%time:~6,2%秒
set backup_dir=%backup_path%\%backup_package%
md %backup_dir%
@echo off
(
echo -- drop directory kkk;
echo create or replace directory kkk as '%backup_dir%';
echo grant read,write on directory kkk to uer1;
echo exit;
)>%tempsql%
sqlplus sys/ABC123 as sysdba @%tempsql%
expdp uer1/ABC123 network_link='lLJ_YWQ directory=tempdumpdir dumpfile=BACKUP_SJQK.DMP logfile=BACKUP_SJQK.log schemas=export,wfd_prodef
exit
:go_2
@echo 路径无效 %backup_path%
pause
10、设置定时任务
(1)在管理工具中找到任务计划程序
(2)任务计划程序库右侧创建任务
(3)名称以及描述
(4)触发器新建,设置执行的时间
(5)操作给出bat路径
(6)对条件和设置进行其它设置