背景
小项目的数据量不大,做个备份,有备无患。
创建备份目录和授权
CREATE OR REPLACE DIRECTORY DIR_DUMP AS 'F:/app/Administrator/backup';
GRANT READ, WRITE ON DIRECTORY DIR_DUMP TO SYSTEM;
SELECT directory_path FROM dba_directories where DIRECTORY_NAME = 'DIR_DUMP';
备份脚本
@echo off
echo ================================================
echo Windows环境下Oracle数据库的自动备份脚本
echo 1. 自动删除7天前的备份。
echo 2. 使用当前日期命名备份文件。
echo 3. 打包压缩文件
echo ================================================
rem ---- 指定备份路径
set backup_dir=F:\app\Administrator\backup
rem ---- 定义时间变量
set day=%date:~0,4%%date:~5,2%%date:~8,2%
set remain_day=7rem --- 删除7天以外的备份文件
rem --- 有rar时选择(建议):
rem forfiles /p "%backup_dir%" /d -%remain_day% /c "cmd /c del /f @path"
rem --- 没rar是选择:
forfiles /p %backup_dir% /s /m *.DMP /d -7 /c "cmd /c del @path"rem --- 将数据备份成dmp格式文件
expdp system/xxxxxx@yhkj directory=dir_dump dumpfile=ABC_%day%.dmp logfile=ABC_%day%.log schemas=ABC parallel=4 compression=ALLrem ---- 如果windows有安装rar,需配置rar的程序路径,用于打包压缩备份数据文件(建议)。如果没有,请把下面两条注释掉。
rem set rar="C:\Program Files\WinRAR\WinRAR.exe"
rem %rar% a -df %backup_dir%\ABC_%day%.rar %backup_dir%\ABC_%day%.dmp %backup_dir%\ABC_%day%.logrem --- if copy dmp file to another machine, unmark rem
rem --- delete netdisk files before 7 days and copy file to netdisk
rem set netdisk_dir=Z:\oracle-backup\
rem forfiles /p "%netdisk_dir%" /d -%remain_day% /c "cmd /c del /f @path"
rem copy %backup_dir%\healmall_%day%.rar %netdisk_dir%\healmall_%day%.rar
还原
impdp system/xxxxxx@yhkj directory=dir_dump dumpfile=ABC_20250206.dmp logfile=impdp_ABC_%day%.log schemas=DEF remap_schema=ABC:DEF TABLE_EXISTS_ACTION=REPLACE
TRUNCATE:删除表中的所有行,但保留表结构。这是较为安全的选择,因为它不会删除表上的任何依赖对象(如索引、约束等)。
REPLACE:删除并重新创建表。这会删除表及其所有依赖对象(如触发器、索引等),然后根据导出文件中的定义重建表。
注意:还原的时候必须和备份的数据库必须同版本!!!