chunchun2012 发表于 2017-10-23 14:07:29

nid修改数据库名称出错

本帖最后由 chunchun2012 于 2017-10-23 14:10 编辑

测试环境为:windows 2003+oracle10.2.0.1

将数据库从A服务器(数据文件路径为:C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL)恢复到B服务器( E:\ORADATA\ORCL)后,数据库可以正常打开,然后尝试将B服务器上的数据库(db_name=orcl)修改为last
操作如下:

C:\Documents and Settings\Administrator>nid target=/ dbname=last

DBNEWID: Release 10.2.0.1.0 - Production on 星期五 10月 20 10:00:41 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接数据库 ORCL (DBID=1445557507)

已连接服务器版本 10.2.0

数据库中的控制文件数:
    E:\ORADATA\ORCL\CONTROL01.CTL
    E:\ORADATA\ORCL\CONTROL02.CTL
    E:\ORADATA\ORCL\CONTROL03.CTL

是否将数据库 ID 和数据库名 ORCL 更改为 LAST? (Y/) => Y

操作继续进行
将数据库 ID 从 1445557507 更改为 1061048138
将数据库名从 ORCL 更改为 LAST
    控制文件 E:\ORADATA\ORCL\CONTROL01.CTL - 已修改
    控制文件 E:\ORADATA\ORCL\CONTROL02.CTL - 已修改
    控制文件 E:\ORADATA\ORCL\CONTROL03.CTL - 已修改
    数据文件 E:\ORADATA\ORCL\SYSTEM01.DBF - dbid 已更改, 已写入新名称
    数据文件 E:\ORADATA\ORCL\UNDOTBS01.DBF - dbid 已更改, 已写入新名称
    数据文件 E:\ORADATA\ORCL\SYSAUX01.DBF - dbid 已更改, 已写入新名称
    数据文件 E:\ORADATA\ORCL\USERS01.DBF - dbid 已更改, 已写入新名称
    数据文件 E:\ORADATA\ORCL\EXAMPLE01.DBF - dbid 已更改, 已写入新名称
    数据文件 E:\ORADATA\ORCL\TESTTB.DBF - dbid 已更改, 已写入新名称

NID-00111: 执行
    begin       dbms_backup_restore.nidprocessdf(:fno, :istemp, :skipped, :idc
ed,                                        :nmchged);    end;
ORA-01116: 打开数据库文件 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF 时出

ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 3) 系统找不到指定的路径。
ORA-06512: 在 "SYS.X$DBMS_BACKUP_RESTORE", line 6164
ORA-06512: 在 line 1
时从目标数据库报告 Oracle 错误


更改数据库名和数据库 ID 失败。
必须完成更改或 REVERT 更改才能尝试其它数据库操作。
DBNEWID - 已完成, 但出现错误。

看到这个错误我明白出错的原因是 数据库恢复后忘记了将临时表空间对应的文件路径修改过来,导致控制文件中记录的还是原来的路径
此时想到的办法是先修正临时表空间的这个错误,再执行nid 修改数据库名称

但是重新Mount数据库后,尝试修改临时表空间的名称,却提示这个

SQL> alter database tempfile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF'
drop;
alter database tempfile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF'  drop

*
第 1 行出现错误:
ORA-19951: 在 DBNEWID 完成之前不能修改控制文件

尝试使用nid命令还原修改,仍失败

C:\Documents and Settings\Administrator>nid target=/ dbname=last

DBNEWID: Release 10.2.0.1.0 - Production on 星期五 10月 20 11:04:08 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接数据库 ORCL (DBID=1445557507)
操作已在进行中, 继续执行

已连接服务器版本 10.2.0

数据库中的控制文件数:
    E:\ORADATA\ORCL\CONTROL01.CTL
    E:\ORADATA\ORCL\CONTROL02.CTL
    E:\ORADATA\ORCL\CONTROL03.CTL

是否将数据库 ID 和数据库名 ORCL 更改为 LAST? (Y/) => N   #选择N表示取消更改

操作已根据用户请求取消
    实例关闭

数据库保持原样 - 数据库已准备就绪, 可以打开或关闭。
DBNEWID - 已取消。

C:\Documents and Settings\Administrator>nid target=/ revert=yes

DBNEWID: Release 10.2.0.1.0 - Production on 星期五 10月 20 11:33:34 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接数据库 ORCL (DBID=1445557507)

已连接服务器版本 10.2.0

数据库中的控制文件数:
    E:\ORADATA\ORCL\CONTROL01.CTL
    E:\ORADATA\ORCL\CONTROL02.CTL
    E:\ORADATA\ORCL\CONTROL03.CTL

还原对数据库 ORCL 的更改 (Y/) => Y

操作继续进行
将数据库 ID 从 1061048138 还原为 1445557507
将数据库名从 LAST 还原为 ORCL
    控制文件 E:\ORADATA\ORCL\CONTROL01.CTL - 已修改
    控制文件 E:\ORADATA\ORCL\CONTROL02.CTL - 已修改
    控制文件 E:\ORADATA\ORCL\CONTROL03.CTL - 已修改
    数据文件 E:\ORADATA\ORCL\UNDOTBS01.DBF - 已还原
    数据文件 E:\ORADATA\ORCL\SYSAUX01.DBF - 已还原
    数据文件 E:\ORADATA\ORCL\USERS01.DBF - 已还原
    数据文件 E:\ORADATA\ORCL\EXAMPLE01.DBF - 已还原
    数据文件 E:\ORADATA\ORCL\TESTTB.DBF - 已还原

NID-00111: 执行
    begin       dbms_backup_restore.nidprocessdf(:fno, :istemp, :skipped, :idchg
ed,                                        :nmchged);    end;
ORA-01116: 打开数据库文件 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF 时出

ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 3) 系统找不到指定的路径。
ORA-06512: 在 "SYS.X$DBMS_BACKUP_RESTORE", line 6164
ORA-06512: 在 line 1
时从目标数据库报告 Oracle 错误


还原数据库名和数据库 ID 失败。
必须完成 REVERT 更改才能尝试其它数据库操作。
DBNEWID - 已完成, 但出现错误。

请问一下,为什么nid命令出错后,没办法撤销了?没办法撤销的话,无法打开数据库进行任何修改
上面的操作看来有点像死循环了?要成功运行nid命令就必须在mount数据库时修改临时表空间路径,但是要修改控制文件就必须成功运行nid命令...这个怎么破?

biotwang 发表于 2018-6-11 16:20:21

nid 一开始修改TEMP01.DBF 因为路径问题,而没有修改成功,之后。可以考虑重建control file,放弃此temp file.
先将数据库拉起来。之后新建一个TEMP表空间吧。

biotwang 发表于 2018-6-11 16:22:24

Oracle SID, DB_NAME, DBID change.pdf
页: [1]
查看完整版本: nid修改数据库名称出错