Oracle的备份
-
- Oracle备份
-
- 注意事项
- Oracle备份命令——exp
- Oracle的备份脚本
-
- 注意事项
- Windows
- Linux
- 定时备份
-
- 注意事项
- Windows下的定时备份
- Linux下的定时备份
- 常见问题
-
-
- 有些表导着导着就没了
-
Oracle备份
注意事项
- 命令执行位置
- Oracle服务端
- Oracle客户端
- 备份数据库编码格式
- Oracle客户端与Oracle服务端的编码格式
- 是否支持exp命令
- 是否安装Oracle客户端或Oracle服务端
- 是否拥有读写权限
- Window下的系统盘
- Linux的用户读写权限
Oracle备份命令——exp
- Oracle服务端下运行
-- 备份指定用户
--exp 用户名/用户密码 buffer=数据缓冲区大小 file=备份文件存储路径 log=备份日志存储路径
--例如:
--Windows
exp scott/pwd buffer=409600 file=D:\Oracle\Backup\scott.dmp log=D:\Oracle\Backup\scott.log
--Linux
exp scott/pwd buffer=409600 file=/home/dev/oracle/backup/scott.dmp log=/home/dev/oracle/backup/scott.log
- Oracle客户端下运行
-- 备份指定用户
--exp 用户名/用户密码@连接名 buffer=数据缓冲区大小 file=备份文件存储路径 log=备份日志存储路径
--例如:
--Windows
exp scott/pwd@dev_001 buffer=409600 file=D:\Oracle\Backup\scott.dmp log=D:\Oracle\Backup\scott.log
连接名为:tnsnames.ora下配置的名称
dev_001 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))
Oracle的备份脚本
注意事项
- 脚本执行位置
- Windows
- Linux
- 脚本执行权限
- 查询Oracle服务端编码
select userenv('language') from dual;
- 脚本的格式
- Windows:一般为GB2312
- Linux:一般为UTF-8
Windows
@echo off
title 数据库备份脚本
color 07:: 设置Oracle编码
:: 如果设置的Oracle编码的与Oracle服务端编码不一致,可能会导致乱码
:: 为减少不必要的麻烦,建议与Oracle服务端编码保持一致
set NLS_LANG="AMERICAN_AMERICA.ZHS16GBK":: 获取日期时间
set currentTime=%time:~0,2%%time:~3,2%%time:~6,2%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%set basePath="D:\backup\dmp"
set baseRecoveryPath="D:\backup\recovery"set oneLevelPath=%basePath%\%year%
set secondLevelPath=%oneLevelPath%\%month%
set threeLevelPath=%secondLevelPath%\%day%:: 一级路径
if not exist "%oneLevelPath%" mkdir %oneLevelPath% :: 二级路径
if not exist "%secondLevelPath%" mkdir %secondLevelPath% :: 三级路径
if not exist "%threeLevelPath%" mkdir %threeLevelPath% :: echo "导出指定用户下的数据文件";
:: 导出scott数据库文件
echo "Export scott..."
exp scott/pwd buffer=409600 file=%threeLevelPath%\scott_%currentTime%.dmp log=%threeLevelPath%\scott_%currentTime%.log
echo "已完成数据库备份工作"echo "开始复制备份文件到恢复文件夹..."
:: scott
copy %threeLevelPath%\scott_%currentTime%.dmp %baseRecoveryPath%\scott.dmp
echo "已完成文件复制工作"
Linux
#! /bin/bash
# Oracle数据库备份# 设置Oracle备份所需的环境变量
# 如需设置Linxu定时任务自动运行脚本,必须设置环境变量
export ORACLE_HOME="/u01/app/oracle/product/11.2.0/EE";
export ORACLE_SID=EE;
export PATH="$PATH:/u01/app/oracle/product/11.2.0/EE/bin";# 容器内执行,本地文件备份
# 设置Oracle编码
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK";
# 获取日期
# dateTime=$(date +%Y-%m-%d-%H%M%S);# 获取当前日期
currentTime=$(date +%H%M%S);
year=$(date +%Y);
month=$(date +%m);
date=$(date +%d);
# 基础路径
basePath="/u01/app/oracle/backup/dmp";
baseRecoveryPath="/u01/app/oracle/backup/recovery";
oneLevelPath="$basePath/$year";
secondLevelPath="$basePath/$year/$month";
threeLevelPath="$basePath/$year/$month/$date";# 判断一级路径是否存在————年份
if [ ! -d "$oneLevelPath" ]; thenmkdir "$oneLevelPath"
fi# 判断二级路径是否存在————月份
if [ ! -d "$secondLevelPath" ]; thenmkdir "$secondLevelPath"
fi# 判断三级路径是否存在————日
if [ ! -d "$threeLevelPath" ]; thenmkdir "$threeLevelPath"
fi# echo "导出指定用户下的数据文件";
# scott导出数据库文件
echo "Export scott...";
exp scott/pwd buffer=409600 file=$threeLevelPath/scott$currentTime.dmp log=$threeLevelPath/scott$currentTime.log;
echo "已完成数据库备份工作";echo "开始复制备份文件到恢复文件夹..."
# scott
cp $threeLevelPath/scott$currentTime.dmp $baseRecoveryPath/scott.dmp;
echo "已完成文件复制工作";echo "所有事项已完成,结束备份工作";
定时备份
注意事项
- 权限
- 读、写、可执行权限
- 不含有中断指令
- 例如:pause及其他可能导致脚本暂停的指令
Windows下的定时备份
- 找到并打开“任务计划程序”
- 位于:控制面板\系统和安全\管理工具 下选中 “任务计划程序”
- Win10可以直接通过小娜搜索
- 为了便于管理,可以在任务计划程序库中新建文件夹
- 接下来 创建任务
- 输入具有描述性的名称、描述
- 新增触发器,设置合适的执行周期
- 新建操作,选中启动程序,在设置中选择需要执行的脚本文件
- 保存即可
Linux下的定时备份
- 查看是否具有crontab命令
- 设置定时任务
crontab -e
- 基于vi的编辑方式
# crontab命令解释 # * * * * * command # 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令 # 例如:每天01:00执行数据库备份脚本——backup.sh0 1 * * * /u01/app/oracle/backup.sh > /u01/app/oracle/cron.log 2>&1
- 在命令模式下,输入wq!保存即可
- 引用:crontab命令参考地址
//重新载入配置 /sbin/service crond reload //重启服务 /sbin/service crond restart
常见问题
有些表导着导着就没了
> 引用:11g默认创建一个表时不分配segment,只有在插入数据时才会产生(当然也可以强制分配),以节省磁盘空间。
参考地址1
参考地址2
- 解决方案1
--查询空表,并生成修改空表导出规则语句 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/39824.html