需求(描述不正确可忽略):
数据库服务器:linux系统,物理小机,oracle11.2.4
本地服务器:windows 2018 虚拟机系统,oracle11.2.4
需要将远程服务器的数据备份到本地服务器某个目录下
前置条件
本地服务器已安装好数据库oracle11.2.4
本地服务器有足够的存储空间(根据备份数据库数据大小)
备份前最好梳理下数据库,删掉不用的表(临时创建的表,备份表或其他)
操作步骤
以下操作只在本地服务器操作
1、创建一个可用的表空间
create tablespace BACKUP
datafile 'D:\APP\ADMINISTRATOR\ORADATA\OGDP2020\ogdp2020.ORA'
size 4G
AUTOEXTEND ON NEXT 1G
maxsize unlimited;
2、创建备份的用户
创建的用户最好同需要备份数据用户相同
create user backuser
IDENTIFIED BY backpassword
DEFAULT TABLESPACE BACKUP TEMPORARY TABLESPACE TEMP;
3、用户授权
grant all privileges to backuser;
grant dba to backuser;
4、在本地数据库用户backuser下创建dblink
该dblink中的数据库信息是数据库服务器的信息
create database link dblink1
connect to dbusername identified by dbpassword
using
'(DESCRIPTION =(ADDRESS_LIST =
(ADDRESS =(PROTOCOL = TCP)
(HOST = 192.168.0.1)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = orcl)))';
5、创建备份目录
--创建备份目录
CREATE DIRECTORY BAKDIR AS 'D:\dbback';
--查看当前数据库目录
select * from dba_directories;
6、创建备份脚本
新建txt文件,输入以下内容后,将文件后缀名改为bat
在创建好脚本之后,先执行下脚本,若能正常连接到数据库,再开始创建windows定时任务
@echo off
rem 获取当前系统时间
set current_date=%date:~0,4%%date:~5,2%%date:~8,2%
rem 设置数据库连接地址
set address=10.127.128.46:1521/orcl
rem 设置用户名、密码
set username=orcl
set password=paawdar@21
rem 创建连接
set connect=%username%/%password%@%address%
rem 执行备份
expdp userid=%connect% directory=bakdir network_link=dblink1 dumpfile=%current_date%.dmp logfile=%current_date%.log schemas=backuser
rem 删除备份,只保留4天的
set SrcDir=D:\dbback
set DaysAgo=4
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
forfiles /p %SrcDir% /s /m "*" /d -%DaysAgo% /c "cmd /c rd /s /q @path"
echo 备份完成