恢复数据库并非所有行都已恢复
Restoring database not all rows restored
我在数据库 HELLO
中有一个 table EMPLOYEE.EMPLOYEE
,其中包含如下所列的 3 条记录:
EMP_NO BIRTH_DATE FIRST_NAME LAST_NAME GENDER HIRE_DATE BANK_ACCOUNT_NUMBER PHONE_NUMBER
------- ---------- ------------------ -------------------- ------ ---------- ------------------- --------------
1. 06/05/1998 A B M 01/02/2019 026201521420 +91X
2. 10/14/1997 C D M 01/07/2019 034212323454 +91Y
3. 05/27/1997 E F F 01/14/2019 92329323123 +91Z
然后我首先使用以下命令进行离线备份
mkdir offlinebackup
db2 terminate
db2 deactivate database HELLO
db2 backup database HELLO to ~/offlinebackup/
之后我得到这个输出:
Backup successful. The timestamp for this backup image is : 20190128115210
现在我使用以下命令进行在线备份
db2 update database configuration for HELLO using LOGARCHMETH1 'DISK:/database/config/db2inst1/onlinebackup'
db2 backup database HELLO online to /database/config/db2inst1/onlinebackup compress include logs
在此之后我得到输出为:
Backup successful. The timestamp for this backup image is : 20190128115616
现在我回到 db2 并 运行 CONNECT TO HELLO
将我连接到我的数据库。当我检查 EMPLOYEE.EMPLOYEE
table 中的行时,我仍然得到所有 3 行。
现在我删除带有 EMP_NO 3 的行。这已成功删除。然后我从 db2 终端 运行 quit
然后我使用这个命令运行从我的离线备份恢复:
db2 restore db HELLO from ~/offlinebackup/ replace existing
它说 DB20000I The RESTORE DATABASE command completed successfully
现在我尝试连接到 HELLO,它说 SQL1117N A connection to or activation of database "HELLO" cannot be made because of ROLL-FORWARD PENDING. SQLSTATE=57019
我运行db2 rollforward db HELLO to end of logs and stop
然后我连接到 HELLO 并尝试找出行,我只得到 2 行,而不是备份中的 3 行。
EMP_NO BIRTH_DATE FIRST_NAME LAST_NAME GENDER HIRE_DATE BANK_ACCOUNT_NUMBER PHONE_NUMBER
------- ---------- ------------------ --------------------- ------ ---------- ------------------- --------------
1. 06/05/1998 A B M 01/02/2019 026201521420 +91X
2. 10/14/1997 C D M 01/07/2019 034212323454 +91Y
备份中存在的第三条记录不可见。谁能弄清楚为什么我无法从备份中恢复第三条记录
你运行的前滚命令:
db2 rollforward db HELLO to end of logs and stop
重播了所有可用的日志,包括与 delete
语句对应的记录。
如果您想将数据库恢复到备份后的状态,您可以 运行
db2 rollforward db HELLO to end of backup and stop
或者,由于您是从离线备份恢复,完全没有必要前滚,您可以使用
db2 rollforward db HELLO stop
或者,完全跳过前滚(当然只适用于脱机备份):
db2 restore db HELLO from ~/offlinebackup/ replace existing without rolling forward
我在数据库 HELLO
中有一个 table EMPLOYEE.EMPLOYEE
,其中包含如下所列的 3 条记录:
EMP_NO BIRTH_DATE FIRST_NAME LAST_NAME GENDER HIRE_DATE BANK_ACCOUNT_NUMBER PHONE_NUMBER
------- ---------- ------------------ -------------------- ------ ---------- ------------------- --------------
1. 06/05/1998 A B M 01/02/2019 026201521420 +91X
2. 10/14/1997 C D M 01/07/2019 034212323454 +91Y
3. 05/27/1997 E F F 01/14/2019 92329323123 +91Z
然后我首先使用以下命令进行离线备份
mkdir offlinebackup
db2 terminate
db2 deactivate database HELLO
db2 backup database HELLO to ~/offlinebackup/
之后我得到这个输出:
Backup successful. The timestamp for this backup image is : 20190128115210
现在我使用以下命令进行在线备份
db2 update database configuration for HELLO using LOGARCHMETH1 'DISK:/database/config/db2inst1/onlinebackup'
db2 backup database HELLO online to /database/config/db2inst1/onlinebackup compress include logs
在此之后我得到输出为:
Backup successful. The timestamp for this backup image is : 20190128115616
现在我回到 db2 并 运行 CONNECT TO HELLO
将我连接到我的数据库。当我检查 EMPLOYEE.EMPLOYEE
table 中的行时,我仍然得到所有 3 行。
现在我删除带有 EMP_NO 3 的行。这已成功删除。然后我从 db2 终端 运行 quit
然后我使用这个命令运行从我的离线备份恢复:
db2 restore db HELLO from ~/offlinebackup/ replace existing
它说 DB20000I The RESTORE DATABASE command completed successfully
现在我尝试连接到 HELLO,它说 SQL1117N A connection to or activation of database "HELLO" cannot be made because of ROLL-FORWARD PENDING. SQLSTATE=57019
我运行db2 rollforward db HELLO to end of logs and stop
然后我连接到 HELLO 并尝试找出行,我只得到 2 行,而不是备份中的 3 行。
EMP_NO BIRTH_DATE FIRST_NAME LAST_NAME GENDER HIRE_DATE BANK_ACCOUNT_NUMBER PHONE_NUMBER
------- ---------- ------------------ --------------------- ------ ---------- ------------------- --------------
1. 06/05/1998 A B M 01/02/2019 026201521420 +91X
2. 10/14/1997 C D M 01/07/2019 034212323454 +91Y
备份中存在的第三条记录不可见。谁能弄清楚为什么我无法从备份中恢复第三条记录
你运行的前滚命令:
db2 rollforward db HELLO to end of logs and stop
重播了所有可用的日志,包括与 delete
语句对应的记录。
如果您想将数据库恢复到备份后的状态,您可以 运行
db2 rollforward db HELLO to end of backup and stop
或者,由于您是从离线备份恢复,完全没有必要前滚,您可以使用
db2 rollforward db HELLO stop
或者,完全跳过前滚(当然只适用于脱机备份):
db2 restore db HELLO from ~/offlinebackup/ replace existing without rolling forward