利用游标进行数据库数据备份
来源:互联网 发布:mysql 5.6.25.tar.gz 编辑:程序博客网 时间:2024/05/19 01:33
今天同事问我一个问题:他需要每天将tableA中指定条件下的数据copy到tableB中,并删除tableB中已被copy的数据,应该用什么方法高效一些?听到这个方法之后第一反映就是想到在我上家公司的时候,也做了同样的数据备份工作,不过当时脚本是我老大写的,我只是看了一眼,大概是将需要备份的数据查询出来,在循环结果集逐条将数据移走,为了减少数据压力,并每处理500记录之后commit一次。当时只是看了这种想法,也没多想这种写法用到了什么,结果也只是告诉同事这样一个思路。
现在回来咨询了下度娘,终于找到了原来使用的是游标(这里使用的是Oracle,当然游标在DB2,Mysql等数据库中也是可以使用的)
现在简单举例利用游标进行数据备份(移动)
背景:
表A
testA(
id int,
name varchar2(20)
)
表B
testB(
id int,
name varchar2(20)
)
第一种游标使用方法
declare
--类型定义
cursor c_job
is
select id,name
from testa;
--定义一个游标变量c_row c_job%rowtype ,该类型为游标c_job中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
insert into testB(id,name)values(c_row.id,c_row.name);
delete from testA where id=c_row.id and name=c_row.name;
end loop;
commit;
end;
在上面一种方法中,一次性将数据全部,如果数据量较小的话,倒没有什么影响,但如果是大量的数据,一次做commit,会大的增加数据库的资源消耗,因此可以采用下面的方法来拿到rownum(Oracle有此关键字)来定数据量commit
declare
--类型定义
cursor c_job
is
select id,name,rownum
from testB;
--定义一个游标变量c_row c_job%rowtype ,该类型为游标c_job中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
insert into testA(id,name)values(c_row.id,c_row.name);
delete from testB where id=c_row.id and name=c_row.name;
if c_row.rownum=2 then
commit;
end if;
end loop;
commit;
end;
当然如果不用rownum的话,也可以定义变量来进行i++的操作记录
declare
--定义变量i为int类型,值为0;
i int:=0;
--类型定义
cursor c_job
is
select id,name,rownum
from testA;
--定义一个游标变量c_row c_job%rowtype ,该类型为游标c_job中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
i:=i+1;--进行i+1
insert into testB(id,name)values(c_row.id,c_row.name);
delete from testA where id=c_row.id and name=c_row.name;
if i=2 then
commit;
end if;
end loop;
commit;
end;
对于游标不熟悉的同鞋,这里提供一份游标学习资料,希望可以帮忙到大家(其实我也是刚才学习到,吼吼)
Oracle游标使用方法及语法大全
Oracle游标详解
- 利用游标进行数据库数据备份
- 利用Xtrabackup进行mysql数据库的备份
- 利用Xtrabackup进行mysql数据库的备份
- 利用远程桌面连接进行数据备份
- 利用游标进行简单的数据先进先出操作
- 用bcp进行数据库数据备份
- centos定时任务进行数据库数据备份
- 利用游标update数据
- 如何进行数据库热备份和热备份数据恢复?
- 利用SQL2000的DTS调度进行定期数据库备份
- j2EE 利用Quartz任务调度 进行 mysql 数据库自动备份
- 利用sql语句进行数据库的备份与还原
- 利用VB进行SQL2000的数据备份和恢复
- 利用VB进行SQL2000的数据备份和恢复
- 利用VB进行SQL2000的数据备份和恢复
- 利用PLSQL Developer对oracle中的数据进行备份恢复
- dos命令 连接数据库 进行数据库分离 备份 恢复数据
- 利用游标循环插入数据
- 字符串匹配
- HTML中id、name、class 区别
- HDU1506------据说是DP,我更觉得是简单的枚举
- java面试题一
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
- 利用游标进行数据库数据备份
- 中国“天河二号”成为全球最快超级计算机
- 音乐播放器之源码解析五
- poj 2533 LCS
- 使用xjc生成java类
- 2013java面试题2(答案会更新)
- Ascii utf8 Unicode 字符串转换
- C++基本数据类型
- Android之Button