达梦数据库-物理文件损坏或者误删恢复

作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出。

  • 实例参数文件:

        记录了数据库服务器的各种功能和性能选项,参数属性分为三种:静态、动态和手动。路径为实例的安装目录下,名称为DM.INI。丢失或损坏的情况下会如下报错:

        解决办法:初始化一个和故障实例参数一致的新实例,将DM.INI拷贝到故障实例目录下,修改相关的PATH和端口信息等。

  • 控制文件:

        记录了数据库的初始信息(数据库名称、OGUID 唯一标识、表空间信息等)的二进制文件 ,路径为实例的安装目录下,名称为DM.CTL。可以通过dmctlcvt工具将二进制的文件转化成文本文件

        数据库运行过程中误删控制文件或控制文件损坏不会影响实例服务运行,不过不能操作更改控制文件的相关操作,如创建表空间,会报错‘控制文件错误’。达梦数据库有自动备份控制文件的策略,控制文件备份的路径默认是在数据目录下的ctl_bak目录下,也可以通过查看dm.ini中的CTL_BAK_PATH参数来确认控制文件备份路径,如下图,只要将最新的控制文件把它拷贝到数据目录下并重命名为dm.ctl即可正常启动数据库。

    

  • 联机重做日志:

        包含了所有物理数据页的修改内容,路径为实例的安装目录下,名称为DAMENG01.log/DAMENG02.log。可以通过语句select * from v$rlogfile;查看日志信息。丢失或损坏的情况下,数据库可以正常运行,不过存在风险。

        运作中发现丢失,此时应该立即逻辑导出,然后新建实例在逻辑导入。

  • 通过逻辑导出数据

        ./dexp USERID=SYSDBA/SYSDBA FILE=FULL_DB.dmp FULL=Y DIRECTORY=...

  • 初始化一个和故障实例参数一致的新实例

        初始化时的参数可查看dminit###.log文件(###为八位日期+6位流水)

        ./dminit path=新实例目录 

  • 通过逻辑导入数据

        ./dimp SYSDBA/SYSDBA@192.168.112.128:5237 FULL='Y' FILE='.../FULL_DB.dmp'

服务已经关闭:

        当开启归档且有备份时:

                使用“备份+归档”还原一个新实例,不存在数据丢失的可能。

      当无归档和备份时:

                只能替换REDO日志启动数据库,为不完全恢复,可能会有数据丢失的可能。

  • 初始化一个和故障实例参数一致的实例,正常启动、停止一次
  • 查看故障实例的db_magic值(数据库魔数)和pemnt_magic值(数据库永久魔数)

        ./dmmdf type=1 file=/home/dmdba/dmdbms/data/DAMENG/SYSTEM.DBF

  • 修改新实例的db_magic值和pemnt_magic值

        ./dmmdf type=2 file=/home/dmdba/dmdbms/data/DAMENG02/DAMENG0201.log

        ./dmmdf type=2 file=/home/dmdba/dmdbms/data/DAMENG02/DAMENG0202.log

  • 将修改后的日志文件拷贝到故障库,然后启动数据库。

        ./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini

  • 启动成功后,进行一次全备。

  • 用户数据文件:

用户创建的业务相关的数据文件(包含main.dbf),数据库运行过程中误删用户数据文件损坏不会影响实例服务运行。

误删后未停止数据库服务

  • 通过逻辑导出数据

        ./dexp USERID=SYSDBA/SYSDBA FILE=FULL_DB.dmp FULL=Y DIRECTORY=...

  • 初始化一个和故障实例参数一致的新实例

        初始化时的参数可查看dminit###.log文件(###为八位日期+6位流水)

        ./dminit path=新实例目录 

  • 通过逻辑导入数据

        ./dimp SYSDBA/SYSDBA@192.168.112.128:5237 FULL='Y' FILE='.../FULL_DB.dmp'

误删前已开启归档且有备份

使用“备份+归档”还原一个新实例,不存在数据丢失的可能。

  • 初始化一个和故障实例参数一致的新实例

        ./dminit path=新实例目录

  • 通过备份+归档还原

        打开RMAN:

        RMAN> RESTORE DATABASE '新实例DM.INI目录' FROM BACKUPSET '备份目录';

        RMAN> RECOVER DATABASE '新实例DM.INI目录' with archivedir '归档目录' UNTIL time '恢复时间点';

        RMAN> recover database '新实例DM.INI目录' update db_magic

误删前无归档无备份

        这种情况下数据已经确定无法恢复,只能尽可能保存其他数据,此时可以通过修改控制文件让数据库服务启动,之后再进行备份、还原等操作。

  • 通过dmctlcvt 工具将控制文件转换为可读文件

        ./dmctlcvt TYPE=1 SRC=控制文件dm.ctl目录 DEST=转换的可读文件保存目录

  • 修改可读文件,将被删除的数据文件的fil_path目录的一行记录删除即可,如下图。

  • 通过dmctlcvt工具将控制文件转换为二进制文件。

        ./dmctlcvt TYPE=2 SRC=转换的可读文件保存目录 DEST=控制文件dm.ctl目录

  • 重新启动数据库进行逻辑备份。

        此时控制文件会被自动补全fil_path(补全机制尚未明确,现象是取之上面最近的一个fil_path),原该数据文件下的表数据会缺失或错误。

  • ROLL.DBF

        用于保存系统的回滚记录,提供事务回滚时的信息。回滚文件整个是一个段。每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录。

        同上述的用户数据文件的操作。差异在于无法恢复时,可以选择跳过回滚段PURG的操作启动数据库,修改dm.ini参数PSEG_RECV为0。

        若启动不了,则进行ROLL的替换:初始化和故障实例参数一致的新实例,最好将ROLL文件大小调整到源库之前一致,然后拷贝到故障库即可。

  • 密钥文件:

        dm_service.prikey是达梦数据库密钥文件,删除后数据不会丢失,此时数据库无法启动。

         可以初始化一个新的实例,将新实例的dm_service.prikey拷贝到故障实例数据目录下,数据库就能启动。

达梦社区地址:https://eco.dameng.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值