oracle自动备份数据库
2016-03-27 10:56
676 查看
最近在使用oracle,本人经常没心,担心数据丢失,所以只能通过各种方式来减少丢失的概率。于是研究了一下oracle数据库备份,其实也算不上研究了,就是百度查找资料然后自己实际操作呗。下面把步骤总结一下。
目录:
一,Windows下的oracle自动备份
二,Ubuntu下的oracle自动备份
一、Windows下oracle 自动备份
1,系统:Windows7
2,建立.bat执行文件
3,建立定时器任务,定时执行
4,向数据库导入dmp文件
下面是语句,直接新建一个文本文档,文件类型为.bat,然后复制粘贴过去即可。
注:如果有时我们写bat脚本执行时一闪而过,无法排错;那么我可以在脚本的最后加个pause(如上面的脚本可以把exit换成pause),用pause结尾执行完后,会提示按任意键来继续或退出,
这样我就能知道是什么报错。
2,建立定时器任务,每天自动执行
1,在开始里输入“任务计划”,会显示任务计划器
2,打开任务计划器后,选择创建基本任务
3,直接按要求输入,然后下一步即可,当执行到 操作 一步时,要选择刚才建立的bat文件
4,注意:如需每天自动执行,则oracle的监听服务要看起,就是通常用oracle时要开的那个服务。
4)向数据库导入dmp文件
生成备份当然是为了导入,导入非常简单,如下语句
既可以 直接 cmd 在控制台运行,也可以建立一个.bat文件,随便你自己。其中:BACKUPS是用户名,kanggw是密码。@后是数据库服务名。
但当用exp备份时,空表是不进行备份的。oracle11G有一个新特性,如需备份需要进行设置
解决方法: 1、insert一行,再rollback就产生segment了。
该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。
2、设置deferred_segment_creation 参数
该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
如 需导出之前的空表,只能用第一种方法
二、Ubuntu下oracle自动备份
我总结为两部分:
1,备份脚本的实现(复制粘贴)。
2,定时执行备份脚本
1,备份脚本的实现(复制粘贴)
代码示例:
su - oracle
oracle为安装oracle的用户或者是root也可以。
在/opt下创建backup文件夹,在该文件夹下创建auto_backup.sh文件。
该文件内容为:
2,定时执行备份脚本
添加定时执行任务
输入命令
crontab -e 进入oracle用户的定时任务执行列表
输入:0 23 * * * /opt/backup/auto_backup.sh
此处为每天晚上23点开始执行备份,具体时间 ,可参考Linux 的Cron表达式,可提供多种时间机制。
2016-10-27
补充
工作也是生活的一部分,当专注与工作本身之时,会感受到无穷的乐趣,其创造力也是无限可能的。
目录:
一,Windows下的oracle自动备份
二,Ubuntu下的oracle自动备份
一、Windows下oracle 自动备份
1,系统:Windows7
2,建立.bat执行文件
3,建立定时器任务,定时执行
4,向数据库导入dmp文件
下面是语句,直接新建一个文本文档,文件类型为.bat,然后复制粘贴过去即可。
@echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo 1. 使用当前日期命名备份文件。 echo 2. 自动删除7天前的备份。 echo ================================================ ::以“YYYYMMDD”格式取出当前时间。 set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2% ::创建备份目录。 if not exist "D:\backup\data" mkdir D:\backup\data if not exist "D:\backup\log" mkdir D:\backup\log set DATADIR=D:\backup\data set LOGDIR=D:\backup\log set mydate=%date:~0,4%%date:~5,2%%date:~8,2%%Time:~0,2% exp userid='ADMIN/kanggw@OracleOrcl' file=%DATADIR%\data_%BACKUPDATE%.dmp log=%LOGDIR%\log_%mydate%.log ::删除7天前的备份。 forfiles /p "%DATADIR%" /s /m *.* /d -7 /c "cmd /c del @path" forfiles /p "%LOGDIR%" /s /m *.* /d -7 /c "cmd /c del @path" exit
imp BACKUPS/kanggw@OracleOrcl file='D:\backup\data\data_20160325161222.dmp' full=y
其中:@sid是服务名,如果不知道可以在开始里输入:net ,打开net manager 查看</span>
注:如果有时我们写bat脚本执行时一闪而过,无法排错;那么我可以在脚本的最后加个pause(如上面的脚本可以把exit换成pause),用pause结尾执行完后,会提示按任意键来继续或退出,
这样我就能知道是什么报错。
2,建立定时器任务,每天自动执行
1,在开始里输入“任务计划”,会显示任务计划器
2,打开任务计划器后,选择创建基本任务
3,直接按要求输入,然后下一步即可,当执行到 操作 一步时,要选择刚才建立的bat文件
4,注意:如需每天自动执行,则oracle的监听服务要看起,就是通常用oracle时要开的那个服务。
4)向数据库导入dmp文件
生成备份当然是为了导入,导入非常简单,如下语句
imp BACKUPS/kanggw@OracleOrcl file='D:\backup\data\data_20160325161222.dmp' full=y
既可以 直接 cmd 在控制台运行,也可以建立一个.bat文件,随便你自己。其中:BACKUPS是用户名,kanggw是密码。@后是数据库服务名。
但当用exp备份时,空表是不进行备份的。oracle11G有一个新特性,如需备份需要进行设置
设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ deferred_segment_creation boolean TRUE SQL> alter system set deferred_segment_creation=false; 该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。原因:11G中有个新特性,当表无数据时,不分配segment,以节省空间。
解决方法: 1、insert一行,再rollback就产生segment了。
该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。
2、设置deferred_segment_creation 参数
该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
如 需导出之前的空表,只能用第一种方法
二、Ubuntu下oracle自动备份
我总结为两部分:
1,备份脚本的实现(复制粘贴)。
2,定时执行备份脚本
1,备份脚本的实现(复制粘贴)
代码示例:
su - oracle
oracle为安装oracle的用户或者是root也可以。
在/opt下创建backup文件夹,在该文件夹下创建auto_backup.sh文件。
该文件内容为:
#!/bin/sh export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export NLS_LANG=AMERICAN_AMERICA.UTF8 export DATA_DIR=/opt/backup/data export LOGS_DIR=/opt/backup/logs export DELTIME=`date -d "7 days ago" +%Y%m%d` export BAKUPTIME=`date +%Y%m%d%H%M%S` mkdir -p $DATA_DIR mkdir -p $LOGS_DIR echo "Starting bakup..." echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp" exp admin/bjgyjs@orcl file=$DATA_DIR/$BAKUPTIME.dmp log=$LOGS_DIR/$BAKUPTIME.log echo "Delete the file bakup before 7 days..." rm -rf $DATA_DIR/$DELTIME*.dmp rm -rf $LOGS_DIR/$DELTIME*.log echo "Delete the file bakup successfully. " echo "Bakup completed."具体参数与Windows的类似。可以看到数据超过七天就会被清除,否则会导致硬盘容量不足。
2,定时执行备份脚本
添加定时执行任务
输入命令
crontab -e 进入oracle用户的定时任务执行列表
输入:0 23 * * * /opt/backup/auto_backup.sh
此处为每天晚上23点开始执行备份,具体时间 ,可参考Linux 的Cron表达式,可提供多种时间机制。
2016-10-27
补充
工作也是生活的一部分,当专注与工作本身之时,会感受到无穷的乐趣,其创造力也是无限可能的。
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- 路由器备份配置
- 备份线路的配置
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析