[-4558]: 数据文件已存在

【问题描述】

使用 dmrman 工具执行还原操作时报错:[-4558]: 数据文件已存在

【问题原因】

目标数据文件目录下已经存在同名数据文件,导致还原时无法创建该文件而报错。

【问题解决】

  1. 查看数据库恢复日志:
cat dm_BAKRES_202208
##通过dmrman CTLSTMT方式执行恢复,日志没有错误信息,只有一些提示信息
2022-08-16 09:48:16 [INFO] dmap_br P0000024574  PPID0000024572  CMD [BMML_INIT] is ready
2022-08-16 09:48:16 [INFO] dmap_br P0000024574  PPID0000024572  CMD [BMML_CFG_NON_BACKUP] is ready
2022-08-16 09:48:16 [INFO] dmap_br P0000024574  PPID0000024572  CMD [RESTORE_START] is ready

##进入DMRMAN命令中执行RESTORE命令,BAKRES会产生详细错误信息
RESTORE DATABASE '/dmdata/LN/XZZF/dm.ini' FROM BACKUPSET '/dmdata/dmbak/bak/DB_XZZF_INCREMENT_2022_08_15_00_08_15'
2022-08-16 10:03:12 [INFO] dmrman P0000024890  PPID4294967295  /dmdata/xxx/xxx/TBS_xxx.DBF already exists.
2022-08-16 10:03:12 [ERROR] dmrman P0000024890  PPID4294967295  CMD END.CODE:[-4558],DESC:[文件已存在]
2022-08-16 10:03:12 [ERROR] dmrman P0000024890  PPID4294967295  [-4558]:文件已存在
  1. 移除已存在文件:
mv /dmdata/xxx/xxx/xxx_xxx.DBF /dmdata/xxx/xxx/xxx_xxx_bak.DBF
  1. 重新执行还原和恢复即可:
RMAN> RESTORE DATABASE '/dmdata/xxx/xxxx/dm.ini' FROM BACKUPSET '/dmdata/dmbak/bak/DB_xxxx_INCREMENT_2022_08_15_00_08_15'
RESTORE DATABASE '/dmdata/xxx/dm.ini' FROM BACKUPSET '/dmdata/dmbak/bak/DB_xxxx_INCREMENT_2022_08_15_00_08_15'
[Percent:99.87%][Speed:0.00M/s][Cost:00:00:05][Remaining:00:00:00]
restore successfully.

RMAN> RECOVER DATABASE '/dmdata/xx/xxxx/dm.ini' FROM BACKUPSET '/dmdata/dmbak/bak/DB_xxxx_INCREMENT_2022_08_15_00_08_15';
RECOVER DATABASE '/dmdata/xx/xxxx/dm.ini' FROM BACKUPSET '/dmdata/dmbak/bak/DB_xxxx_INCREMENT_2022_08_15_00_08_15';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[4787538]
备份集[/dmdata/dmbak/bak/DB_xxx_INCREMENT_2022_08_15_00_08_15]备份过程中未产生日志
recover successfully!
time used: 228.716(ms)

建议:

  1. 当提示的已存在数据文件并不在达梦数据库默认数据文件路径下时,可通过数据库恢复日志进一步查看已存在文件的具体路径。
  2. 建议创建数据文件时,放在统一目录下,方便维护。