暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

alter database create datafile 的作用

3904

创建一个新的空的数据文件来代替老的使用的数据文件,来创建没有备份的数据文件,前提是数据库开启归档模式且保留数据文件创建以来的可用的归档日志

这种通常用在数据文件损坏,但是没有备份(数据文件)的情况下,但是有归档日志,可以通过归档日志来恢复数据文件!也就是说产生一个新的,这个适合数据文件所在的磁盘损坏,不能恢复到原来的目录,而在其他路径下产生一个新的数据文件。

当然也适用于由于 ADG 备库参数错误导致主库新加的数据文件无法同步至备库的情况。

案 例:

备库由于参数 db_create_file_dest 指定错误导致不同步。
在主库新添加的数据文件由于此参数问题无法同步到备库,导致备库不同步。
控制文件中存在但实际不存在新加的数据文件。

image.png

生产环境实际为 +JIEKEXu_DATA 但由于此磁盘组当时新建时使用添加删除磁盘的方式将其 +DATA 磁盘组中的数据迁移到 ‘+JIEKEXu_DATA’ 下,但参数中还未修改,导致后期主库添加的数据文件均没有同步到备库中。

image.png

/app/product/11.2.0/db/dbs 目录下也并没有实际生成 UNNAME 相关数据文件,只是记录在控制文件中。

image.png

那么,首先修改参数 db_create_file_dest 为正确的磁盘组,然后使用 “alter database create datafile …… as …… size ……” 命令修改数据文件路径为正确的磁盘组即可。

前提是备库的归档日志还保留着,修改完参数然后便可以自动同步剩下的数据文件了。

image.png

如下是当时的步骤,特此记录一下。

alter system set db_create_file_dest='+JIEKEXU_DATA' scope=both sid='*'; 

alter system set standby_file_management=manual scope=memory;

alter database create datafile '/app/product/11.2.0/db/dbs/UNNAMED01357' as '+JIEKEXU_DATA' size 32212254720;

alter database recover managed standby database using current logfile disconnect;

alter system set standby_file_management=auto scope=memory;


SQL> select file_name,file_id,bytes from dba_data_files where file_id=1357;

FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID      BYTES
---------- ----------
+JIEKEXU_DATA/prod/datafile/mmrpto.1735.1067271281
      1357 3.2212E+10


SQL> alter system set standby_file_management=manual scope=memory;

System altered.

SQL> alter database create datafile '/app/product/11.2.0/db/dbs/UNNAMED01358' as '+JIEKEXU_DATA' size 32212254720;

Database altered.

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

SQL> alter system set standby_file_management=auto scope=memory;

System altered.

SQL> select file_name,file_id,bytes from dba_data_files where file_id=1358;

FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID      BYTES
---------- ----------
+JIEKEXU_DATA/prod/datafile/mmrpto.1736.1067271807
      1358 3.2212E+10


SQL> select name,file# from v$datafile where file#=1358;

NAME
--------------------------------------------------------------------------------
     FILE#
----------
+JIEKEXU_DATA/prod/datafile/mmrpto.1736.1067271807
      1358

以上,特此记录之。

————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
扫码_搜索联合传播样式标准色版.png

最后修改时间:2021-03-19 09:56:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论