在Oracle中实现每日表备份并删除7天前的备份表
不用闪回技术,因为业务想眼睁睁的看到备份表,而不是让DBA搞一通之后,才能看到备份数据表
OK,那好办了,写个存储过程解决你的需求,每天建个新表,把数据备份进去,业务人员可以看到这些每天的备份表
然后只保留7天,7天前的表给删掉
创建存储过程
create or replace PROCEDURE DAILY_BACKUP AS
v_now VARCHAR2(8);
v_seven varchar2(8);
v_7tab1_has int;
v_7tab2_has int;
v_7tab3_has int;
v_table_name_1 CONSTANT VARCHAR2(20) := 'TAB_TEST1_';
v_table_name_2 CONSTANT VARCHAR2(20) := 'TAB_TEST2_';
v_table_name_3 CONSTANT VARCHAR2(20) := 'TAB_TEST3_';
BEGIN
--获取当天日期
select to_char(SYSDATE, 'YYYYMMDD')
into v_now
from dual;
--获取7天前日期
select to_char(TRUNC(SYSDATE -7), 'YYYYMMDD')
into v_seven
from dual;
--删除7天前的表
select count(1) into v_7tab1_has from user_tables where TABLE_NAME = upper(v_table_name_1 || v_seven);
if v_7tab1_has=1 then
--如果存在,则执行drop table
execute immediate 'drop table TBS.'|| v_table_name_1 || v_seven;
end if;
select count(1) into v_7tab2_has from user_tables where TABLE_NAME = upper(v_table_name_2 || v_seven);
if v_7tab2_has=1 then
--如果存在,则执行drop table
execute immediate 'drop table TBS.'|| v_table_name_2 || v_seven;
end if;
select count(1) into v_7tab3_has from user_tables where TABLE_NAME = upper(v_table_name_3 || v_seven);
if v_7tab3_has=1 then
--如果存在,则执行drop table
execute immediate 'drop table TBS.'|| v_table_name_3 || v_seven;
end if;
--创建当天的数据备份
EXECUTE IMMEDIATE 'CREATE TABLE TBS.' || v_table_name_1 || v_now || ' AS SELECT * FROM TAB_TEST1';
EXECUTE IMMEDIATE 'CREATE TABLE TBS.' || v_table_name_2 || v_now || ' AS SELECT * FROM TAB_TEST2';
EXECUTE IMMEDIATE 'CREATE TABLE TBS.' || v_table_name_3 || v_now || ' AS SELECT * FROM TAB_TEST3';
END DAILY_BACKUP;
创建作业(每天中午12点执行,注意,你用图形界面创建作业更方便 ,不一定要用语句)
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"TBS"."DAILYBACKDATA"',
job_type => 'STORED_PROCEDURE',
job_action => 'TBS.DAILY_BACKUP',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => 'FREQ=DAILY;BYHOUR=12;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => 'DAILYBACKDATA');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"TBS"."DAILYBACKDATA"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
DBMS_SCHEDULER.enable(
name => '"TBS"."DAILYBACKDATA"');
END;
Enjoy :)
在Oracle中实现每日表备份并删除7天前的备份表的更多相关文章
- Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
说明: Oracle数据库服务器操作系统:CentOSIP:192.168.0.198端口:1521SID:orclOracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务 ...
- Linux下自动备份Oracle数据库并删除指定天数前的备份
说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用 ...
- Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份
@echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...
- Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
说明: 1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...
- SqlServer批量备份多个数据库且删除3天前的备份
/******************************************* * 批量备份数据库且删除3天前的备份 ************************************ ...
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
说明: 我这里要把MySQL数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2011_11_03.tar ...
- MSSQL Server2012备份所有数据库到网络共享盘上面,并自动删除几天前的备份。。
--要备份到哪一服务的IP网络位置,要提前打开文件夹共享.这里还要输入用户名和密码,下面这一行是建立共享 exec master..xp_cmdshell 'net use \\192.168.8.1 ...
- Mongodb自动备份数据库并删除指定天数前的备份
1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/ ...
- oracle定时备份与删除N天前备份文件
oracle定时备份数据库,以及删除7天前备份的数据. 1.创建存放备份目录: mkdir /home/oracle/data_backup mkdir /home/oracle/log_backup ...
随机推荐
- JQuery的页面操作
window.location = "http://www.xxxxxxxx.net" 跳转后有后退功能 其实应该是 window.location.hrefwindow.loca ...
- Iframe高度自适应(兼容IE/Firefox、同域/跨域)
在实际的项目进行中,很多地方可能由于历史原因不得不去使用iframe,包括目前正火热的应用开发也是如此. 随之而来的就是在实际使用iframe中,会遇到iframe高度的问题,由于被嵌套的页面长度不固 ...
- Java几种单例模式的实现与利弊
饿汉式 提前new出来实例了,并不是在第一次调用get方法时才实例化,没有进行延迟加载 public class Singleton1 { private static Singleton1 inst ...
- python学习笔记12-深浅拷贝
以上为浅拷贝. .copy()函数 赋值:数据完全共享(=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变 如果是不可变类型(immutable) ...
- odoo开发笔记 -- 安装Backend debranding去除odoo信息模块后 隐藏开发者模式
Backend debranding 找到如下文件,将相关灰色代码注释掉. <?xml version="1.0" encoding="UTF-8"?&g ...
- PHP:session无法使用
今天在将一套程序放到其他服务器上执行的时候,发现后台的登录验证码不管输入正确与否,总是显示: 验证码输入有误 接着就开始debug了. 因为正确的验证码结果已经经过加密之后保存在了session中,所 ...
- 打印页面时a标签不显示URL的方法
以前写博客啊,总想写一篇大作,然后希望能挂到博客园首页,隔一会儿看看阅读量有多少.其实哪有那么多大作,大部分时间都是解决了一个小问题,然后需要记录一下.比如下面这篇. 今天遇到一个需求是,打印网页时, ...
- SpringCloud入门之eclipse新建maven子项目和聚合项目
一.new maven project : next 二.勾选 create a simple project : next 三.Group Id:项目的包路径 如com.test,之后创建的C ...
- ASP.NET 数据绑定到列表控件
<div> <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox> ...
- 后台线程(daemon)
概念 所谓后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程. ...