业主集中管理方式得oracle数据库集群,要求项目自己备份数据库。
因为oracle集群里有包含很多项目,不能给项目sysdba账号,也没有权限登录oracle所在服务器,所以采用了expdp数据导出的方式进行备份,其中用到了database link。
这里需要在备份执行端也具备服务。
从备份执行端进行操作
一、进入sqlplus
sqlplus / as sysdba
二、创建dblink (从备份执行端连到要备份数据库的服务端)。
这里有点要注意 要用public来创建,否则后面在执行expdp时会出现找不到network_link参数值的情况。错误应该是”参数值无效:*******“
create public database link linkname connect to username identified by "password"
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.129.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)))';
三、在oracle创建一个备份目录(我这里测试的服务端是WINDOWS);
create or replace directory bak_dir as 'D:\production_bak';
四、为账号应用目录赋权;
grant read,write on directory bak_dir to username;
五、执行expdp程序进行备份测试;
expdp username/"password"@orcl directory=bak_dir network_link=to_production dumpfile=test01.dmp logfile=test01.log
备注使用bat(批处理)脚本定期备份;
set filename= filenames_%date:~0,4%%date:~5,2%%date:~8,2%
expdp username/"password"@orcl directory=bak_dir network_link=to_production dumpfile=%filename%.dmp logfile=%filename%.log
set "SrcDir=D:\production_bak"
set "DaysAgo=15"
forfiles /p %SrcDir% /m *.dmp /d -%DaysAgo% /c "cmd /c del /f @path"
forfiles /p %SrcDir% /m *.log /d -%DaysAgo% /c "cmd /c del /f @path"