场景:
用户在使用系统过程中,由于误操作,使用SU10将所有用户的打印机配置全部重置,并且没有保存更改日志
此时又不希望通过数据库恢复操作恢复整个系统
前置条件:
操作只对某几个表进行了修改,能明确是哪个表的数据受到了影响
系统有误操作之前的全备份文件
需要有足够的空间恢复数据库
需要有数据库相关表的读写权限以及用于配置SDA的权限
步骤:
1.新建一台新的租户数据库
2.使用全备份文件,恢复数据库
3.正式租户与临时租户建立SDA链接
4.【可选】在正式系统上以源表为基础,拷贝新的测试表1,2,验证update操作
5.更新正式表中的数据
具体步骤
- 创建租户数据库
CREATE DATABASE TENANTDB SYSTEM USER PASSWORD Password1
- 使用备份文件恢复数据库;如果系统有HA/SR,则需要先创建一个备份文件以同步,然后再做恢复操作。
- 正式租户A 与临时租户B创建SDA连接,使用HANA Studio的话,可以在Provisioning下找到,右键创建一个远程连接,参考如下:
- 创建两个测试用表
#按照USR01复制一个新的表
CREATE TABLE Z_USER01_HPS LIKE "SAPHANADB"."USR01"
#按从远程连接拷贝数据插入
INSERT INTO Z_USER01_HPS SELECT * FROM "SDA_NAME"."SAPHANADB"."USR01"
#检查条目数
select COUNT(1) from "SDA_NAME"."SAPHANADB"."USR01"
#按照USR01再复制一个新的表
CREATE TABLE Z_USER01_DP2 LIKE "SAPHANADB"."USR01"
#按从当前数据库拷贝数据插入
INSERT INTO Z_USER01_dp2 SELECT * FROM "SAPHANADB"."USR01"
#检查条目数
select COUNT(1) from Z_USER01_DP2
- 按照用户账号相同+选定客户端800 为条件,从B表中指定列更新A表中的数据
update Z_USER01_HPS A set A.SPLD=B.SPLD FROM Z_USER01_HPS A
inner join Z_USER01_DP2 B on A.BNAME = B.BNAME AND A.MANDT=‘'800'
- 执行后,可以使用以下SQL对于两张表的数据是否一致,会输出不一致的结果条目
SELECT A.MANDT,A.BNAME,A.SPLD FROM(
SELECT MANDT,BNAME,SPLD FROM Z_USER01_HPS WHERE MANDT='800'
UNION ALL
SELECT MANDT,BNAME,SPLD FROM Z_USER01_DP2 WHERE MANDT='800'
) A
GROUP BY MANDT,BNAME,SPLD
HAVING count(*) = 1
ORDER BY BNAME;
- 多次检查,确保无误后,对正式表进行操作