oracle批量备份表的存储过程
在一些重大变更前,后都需要备份涉及的重要表,当表很多且备份不是最新的时候,需要drop表,因为oracle没if exists 这种语法,写个存储过程来批量备份,当然也可以把加上参数,不过没什么必要,基本知道哪些表需要备份,执行下存储过程就OK
注意,这边如果当天存在同名备份表,会drop掉,
create or replace procedure BAK_CRM_PRO as
type type_array is varray(20) of varchar2(50);
back_tables type_array :=type_array(
'TBL_XXX1',
'TBL_XXX2',
'TBL_XXX3',
'TBL_XXX4',
'TBL_XXX5',
'TBL_XXX6',
'TBL_XXX7',
'TBL_XXX8',
'TBL_XXX9',
'TBL_XXX10'
);
bak_name varchar2(100);
temp_str varchar2(1000);
date_str varchar2(10);
temp_num number;
temp_num2 number;
beginselect to_char(sysdate,'mmdd') into date_str from dual;for i in 1..back_tables.count loopbak_name:='BAK_'||date_str||'_'||back_tables(i);if (length(bak_name)>30) thenbak_name:=regexp_replace(bak_name,'_([[:alpha:]])[[:alpha:]]+','_\1',8);end if;execute immediate 'select count(1) from user_tables a where a.table_name=:1' into temp_num using bak_name ;dbms_output.put_line('temp_num='||temp_num);if(temp_num=1) thentemp_str:='drop table '||bak_name;dbms_output.put_line(temp_str);execute immediate temp_str;end if;temp_str:='create table '||bak_name||' as select * from '||back_tables(i);dbms_output.put_line(temp_str);execute immediate temp_str;temp_num:=1;temp_num2 :=2;execute immediate 'select count(1) from '||back_tables(i) into temp_num;execute immediate 'select count(1) from '||bak_name into temp_num2;dbms_output.put_line('n1='||temp_num||' n2='||temp_num2);if(temp_num=temp_num2)thendbms_output.put_line('back '||bak_name||' success');end if;end loop;
end;
先编译下存储,然后调用就可以
另外plsql中编译存储过程在命令窗口,复制上面的代码,然后输入/ 和回车,就能编译,当然编译前需要替换成自己需要备份的表,就是tbl_xxx那部分
这边用到了dml动态sql,也可以用游标代替,不太熟悉这个
编译后执行 在sql窗口执行下面这个就可以
beginBAK_CRM_PRO_test();
end;
如果不需要这个存储过程可以删除
drop procedure BAK_CRM_PRO_test;
oracle批量备份表的存储过程相关推荐
- mysql 备份大表 存储过程_mysql批量备份表的存储过程写法
1.在工作会遇到这种情况,mysql数据库,系统涉及到备份多表数据,为了方便,用存储过程来实现此功能,同时也复习一下存储过程的写法,同时记录下方便以后扩展修改 2.存储过程代码如下 -- 创建存储过程 ...
- oracle 快速备份表数据
oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9.3 ...
- SQLSERVER和ORACLE批量处理表名和字段名大写
在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "tes ...
- Oracle快速备份表数据
Oracle数据库中备份表数据. 例子: 1 create table table_name_bak as select * from table_name 1 create table table_ ...
- 星环TDH数据库批量生成表和存储过程
环境准备 安装python环境:解压 ,然后设置环境变量.把ETL文件夹放到本地 ETL文件夹以及脚本说明 路径D:\ETL\genproc下是各种运行的Python脚本. 路径D:\ETL\mode ...
- oracle快速备份表
生产上线如何快速备份表. create 表名_bak _日期 as select * from表
- oracle批量删除表空间,批量删除oracle用户表空间
批量删除oracle用户表空间 1.[代码][Shell/批处理]代码 #!/bin/bash # get cuttent path selfpath=$(cd "$(dirname &qu ...
- Oracle批量清空表数据
清空表数据有两种方式,delete from tableName; truncate table tableName; 第二种方式更加高效,直接删除,不能回滚. 如果要批量执行删除脚本,表很多的时候, ...
- oracle中备份表的创建,ORACLE DB创建步骤-运用冷备份和RMAN
u RMAN创建数据库 1.环境的准备 ² 在新建立数据库的机器上申请在DBA组的ORACLE OWNER 用户名必须与原数据库的ORACLE OWNER 相同. ² 安装ORACLE 软件,安 ...
最新文章
- Jad一个好东西(转载)
- python animation 轨迹_Python实例:自动轨迹绘制
- 英文环境下中文输入法的设置
- python 钉钉机器人发送图片_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...
- Linux C目标文件
- android studio 修改文件后出现类型转换错误
- 做过CC1020的苦逼前人告诉你(分拿来)
- .NET利用ActionFilter特性记录日志或者运行性能计数器。(log trace or perform perfcounter by actionFilter attribute)...
- docker,deamon.json文件说明
- Flink DataStream的wordCount、数据源和Sink、Side Outputs、两阶段提交(two-phase commit, 2PC)
- MCU、MPU、DSP、FPGA是什么意思
- 数据结构 —— 图解AVL树(平衡二叉树)
- 一张图片中的分离数据+十进制删改十六进制+连续base32和64编码+okk编码题目--rsa中求d题目
- 主机识别SDIO接口卡过程
- 莫队入门例题之持久化莫队:2120: 数颜色
- 极路由修改为openwrt源并安装transmission挂pt
- python大作业有哪些项目 选题做个啥【推荐】
- 用RGBD投影激光雷达数据:depthimage_to_laserscan
- 游戏设计-《游戏改变世界》-思维导图
- 推荐几个网址 -by jhy