- 最后登录
- 2022-8-22
- 在线时间
- 39 小时
- 威望
- 109
- 金钱
- 695
- 注册时间
- 2012-4-13
- 阅读权限
- 50
- 帖子
- 69
- 精华
- 0
- 积分
- 109
- UID
- 349
|
1#
发表于 2017-10-23 14:07:29
|
查看: 10368 |
回复: 2
本帖最后由 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/[N]) => 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 #选择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/[N]) => 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命令...这个怎么破? |
|