全量和增量

SQL数据迁移技巧

需求:把stu表中的数据,迁移到一张新的表stu2中;
此时,stu2表可能存在,也可能不存在。
select * from stu2;

insert into stu(stuid,stuname) values(1002,'lisi');
insert into stu values(1003,'wangwu');

当stu2表不存在时:
创建stu2表,其字段与后面的select 里面的字段名一致;创建好了表之后,同时把select查询到的数据存入stu2;
如果不想导入所有数据,可以在select语句后面用where过滤;
create table stu2 as select stuid,stuname from stu;

如果表stu2存在:
直接往表中添加数据,insert后面直接跟上查询语句
insert into stu2 select stuid,stuname from stu ;

delete from stu2 where stuid>1001;
这里有两条1001-zhangsan数据,需要去除重复:
delete from stu2 where rowid not in (select min(rowid) from stu2 group by stuid,stuname)

现在stu2表里面,有一行1001-zhangsan的数据,现在需要从stu表中导入数据(需要去除重复数据)
insert into stu2 select stuid,stuname from stu where stuid>(select max(stuid) from stu2);

如果stu2表中存在1001,但是1001对应的stuname叫zs,而stu表中1001对应的stuname是zhangsan,怎么办?
merge into....


想要把stu表里面的数据,迁移到stu2表里面,有两种方式;
1.全量同步
    stu2表里先清空,再把stu表中的所有数据全部导入stu2;
    insert into stu2 select stuid,stuname from stu ;
2.增量同步
    stu2表里面已经有了一部分数据,对于stu表里面的数据,如果stu2已经存在了,就做修改;如果stu2中没有,则做增加
    
这里重点看增量同步:
比如:stu表中,有数据1001-zhangsan;stu2表里面有1001-zs:

update stu2 set stuname='zs' where stuid=1001;
commit;

stu2表示要同步到哪张表;
using stu :表示数据从哪来
on (s1.stuid=s2.stuid) :判断增量的条件
when matched : 表示如果前面的条件匹配上(stu2表里面已经存在的数据)
when not matched then :表示条件没有匹配上的时候(stu2表里没有的数据)

merge into stu2 s2 using stu s1 on (s1.stuid=s2.stuid) 
when matched then update set s2.stuname=s1.stuname where s2.stuid=s1.stuid
when not matched then insert (stuid,stuname) values(s1.stuid,s1.stuname);

执行之后,查询stu2:
select * from stu2;

openGauss 数据库全量增量备份可以通过脚本实现自动化操作,以确保数据库的高效维护数据安全性。以下是一些与 openGauss 全量备份增量备份相关的脚本及配置示例。 ### 全量备份脚本 全量备份会备份整个数据库的完整数据。以下是一个简单的全量备份脚本示例: ```bash #!/bin/bash # 全量备份脚本 weekly_full_backup.sh # 设置备份目录 BACKUP_DIR="/datas/openGauss/backups/full" DATE=$(date +%Y%m%d%H%M%S) LOG_FILE="$BACKUP_DIR/full_backup_$DATE.log" # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR # 执行全量备份命令 gs_basebackup -D $BACKUP_DIR -Fp -Xs -v -w -l full_backup_$DATE >> $LOG_FILE 2>&1 # 压缩备份文件 tar -czf $BACKUP_DIR/full_backup_$DATE.tar.gz -C $BACKUP_DIR . # 清理旧的备份(保留最近7天) find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -exec rm {} \; echo "Full backup completed at $DATE" >> $LOG_FILE ``` ### 增量备份脚本 增量备份仅备份上次备份以来发生变化的数据,可以显著减少备份时间存储空间。以下是一个增量备份脚本示例: ```bash #!/bin/bash # 增量备份脚本 daily_incremental_backup.sh # 设置备份目录 INCREMENTAL_DIR="/datas/openGauss/backups/incremental" DATE=$(date +%Y%m%d%H%M%S) LOG_FILE="$INCREMENTAL_DIR/incremental_backup_$DATE.log" FULL_BACKUP_DIR="/datas/openGauss/backups/full" # 创建增量备份目录(如果不存在) mkdir -p $INCREMENTAL_DIR # 执行增量备份命令,基于最近一次全量备份 gs_basebackup -D $INCREMENTAL_DIR -Fp -Xs -v -w -l incremental_backup_$DATE -b $FULL_BACKUP_DIR >> $LOG_FILE 2>&1 # 压缩增量备份文件 tar -czf $INCREMENTAL_DIR/incremental_backup_$DATE.tar.gz -C $INCREMENTAL_DIR . # 清理旧的增量备份(保留最近3天) find $INCREMENTAL_DIR -type f -name "*.tar.gz" -mtime +3 -exec rm {} \; echo "Incremental backup completed at $DATE" >> $LOG_FILE ``` ### 配置定时任务 为了实现自动化备份,可以使用 `cron` 定时任务来定期执行上述脚本。以下是配置示例: ```bash # 每天凌晨2点执行增量备份 0 2 * * * /bin/bash /datas/openGauss/scripts/daily_incremental_backup.sh # 每周一凌晨3点执行全量备份 0 3 * * 1 /bin/bash /datas/openGauss/scripts/weekly_full_backup.sh ``` ### 注意事项 - 在运行脚本之前,请确保脚本具有可执行权限:`chmod +x /datas/openGauss/scripts/*.sh`。 - 确保 `gs_basebackup` 工具已正确安装并配置在系统路径中。 - 备份目录应具有足够的磁盘空间,并确保有适当的权限设置。 - 日志文件可用于监控备份过程,确保备份任务成功执行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值