ITPub博客

首页 > 数据库 > Oracle > [20200407]nid修改DBID还原.txt

[20200407]nid修改DBID还原.txt

原创 Oracle 作者:lfree 时间:2020-04-08 09:49:29 0 删除 编辑

[20200407]nid修改DBID还原.txt

--//别人问的问题,改错dbid是否可以修改回来。

$  nid
DBNEWID: Release 11.2.0.4.0 - Production on Tue Apr 7 11:36:23 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Keyword     Description                    (Default)
----------------------------------------------------
TARGET      Username/Password              (NONE)
DBNAME      New database name              (NONE)
LOGFILE     Output Log                     (NONE)
REVERT      Revert failed change           NO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SETNAME     Set a new database name only   NO
APPEND      Append to output log           NO
HELP        Displays these messages        NO
--//nid有一个REVERT参数可以反转,看看是否有效。

1.环境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> select name,open_mode,dbid,db_unique_name from v$database;
NAME OPEN_MODE        DBID DB_UNIQUE_NAME
---- ---------- ---------- ---------------
BOOK READ WRITE 1337401710 book
--//dbid= 1337401710

2.使用nid修改dbid

--//关闭数据库启动到mount状态。

SYS@book> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SYS@book> startup mount
ORACLE instance started.
Total System Global Area  643084288 bytes
Fixed Size                  2255872 bytes
Variable Size             205521920 bytes
Database Buffers          427819008 bytes
Redo Buffers                7487488 bytes
Database mounted.

$ nid TARGET=/
DBNEWID: Release 11.2.0.4.0 - Production on Tue Apr 7 11:43:18 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to database BOOK (DBID=1337401710)
Connected to server version 11.2.0

Control Files in database:
    /mnt/ramdisk/book/control01.ctl
    /mnt/ramdisk/book/control02.ctl

Change database ID of database BOOK? (Y/[N]) => y

Proceeding with operation
Changing database ID from 1337401710 to 1477856022
    Control File /mnt/ramdisk/book/control01.ctl - modified
    Control File /mnt/ramdisk/book/control02.ctl - modified
    Datafile /mnt/ramdisk/book/system01.db - dbid changed
    Datafile /mnt/ramdisk/book/sysaux01.db - dbid changed
    Datafile /mnt/ramdisk/book/undotbs01.db - dbid changed
    Datafile /mnt/ramdisk/book/users01.db - dbid changed
    Datafile /mnt/ramdisk/book/example01.db - dbid changed
    Datafile /mnt/ramdisk/book/tea01.db - dbid changed
    Datafile /mnt/ramdisk/book/temp01.db - dbid changed
    Control File /mnt/ramdisk/book/control01.ctl - dbid changed
    Control File /mnt/ramdisk/book/control02.ctl - dbid changed
    Instance shut down

Database ID for database BOOK changed to 1477856022.
All previous backups and archived redo logs for this database are unusable.
Database is not aware of previous backups and archived logs in Recovery Area.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database ID.
DBNEWID - Completed succesfully.

3.检查验证:
SYS@book> startup mount
ORACLE instance started.
Total System Global Area  643084288 bytes
Fixed Size                  2255872 bytes
Variable Size             205521920 bytes
Database Buffers          427819008 bytes
Redo Buffers                7487488 bytes
Database mounted.

SYS@book> select name,open_mode,dbid,db_unique_name from v$database;
NAME OPEN_MODE       DBID DB_UNIQUE_NAME
---- --------- ---------- --------------
BOOK MOUNTED   1477856022 book
--//dbid = 1477856022

$ nid TARGET=/ REVERT=YES
DBNEWID: Release 11.2.0.4.0 - Production on Tue Apr 7 11:45:44 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to database BOOK (DBID=1477856022)
NID-00128: Cannot revert change of database, change not in progress
Reversion of database changes failed during validation - database is intact.
DBNEWID - Completed with validation errors.

--//已经无法该会。我估计如果的当时保存控制文件还在,也许可以改会。

4.只能使用bbed修改。

BBED> p /d dba 1,1 kcvfh.kcvfhhdr.kccfhdbi
ub4 kccfhdbi                                @28       1477856022

$ seq 6 | xargs -IQ echo "p /d dba Q,1 kcvfh.kcvfhhdr.kccfhdbi" | rlbbed  | grep kccfhdbi
BBED> ub4 kccfhdbi                                @28       1477856022
BBED> ub4 kccfhdbi                                @28       1477856022
BBED> ub4 kccfhdbi                                @28       1477856022
BBED> ub4 kccfhdbi                                @28       1477856022
BBED> ub4 kccfhdbi                                @28       1477856022
BBED> ub4 kccfhdbi                                @28       1477856022
--//OK正确。
$ seq 6 | xargs -IQ echo " assign dba Q,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710 "
 assign dba 1,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
 assign dba 2,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
 assign dba 3,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
 assign dba 4,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
 assign dba 5,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
 assign dba 6,1 kcvfh.kcvfhhdr.kccfhdbi = 1337401710
--//执行以上脚本。注意如果通过pipe,必须在第1,2行之间插入1行,内容为Y。

$ seq 6 | xargs -IQ echo " sum apply  dba Q,1 "
 sum apply  dba 1,1
 sum apply  dba 2,1
 sum apply  dba 3,1
 sum apply  dba 4,1
 sum apply  dba 5,1
 sum apply  dba 6,1
--//执行以上脚本。

5.验证看看:
--//重建控制文件:
SYS@book> alter database backup controlfile to trace  ;
Database altered.

--//抽取执行脚本:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "BOOK" NORESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/mnt/ramdisk/book/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/mnt/ramdisk/book/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/mnt/ramdisk/book/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
--   GROUP 4 '/mnt/ramdisk/book/redostb01.log'  SIZE 50M BLOCKSIZE 512,
--   GROUP 5 '/mnt/ramdisk/book/redostb02.log'  SIZE 50M BLOCKSIZE 512,
--   GROUP 6 '/mnt/ramdisk/book/redostb03.log'  SIZE 50M BLOCKSIZE 512,
--   GROUP 7 '/mnt/ramdisk/book/redostb04.log'  SIZE 50M BLOCKSIZE 512
DATAFILE
  '/mnt/ramdisk/book/system01.dbf',
  '/mnt/ramdisk/book/sysaux01.dbf',
  '/mnt/ramdisk/book/undotbs01.dbf',
  '/mnt/ramdisk/book/users01.dbf',
  '/mnt/ramdisk/book/example01.dbf',
  '/mnt/ramdisk/book/tea01.dbf'
CHARACTER SET ZHS16GBK
;

-- Configure RMAN configuration record 1
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
-- Configure RMAN configuration record 2
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET');
-- Configure RMAN configuration record 3
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEFAULT DEVICE TYPE TO','DISK');
--//执行以上内容。

-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archivelog/book/1_1_896605872.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/ramdisk/book/temp01.dbf' REUSE;
-- End of tempfile additions.
--
--
--
----------------------------------------------------------

SYS@book> select name,open_mode,dbid,db_unique_name from v$database;
NAME OPEN_MODE       DBID DB_UNIQUE_NAME
---- --------- ---------- --------------
BOOK MOUNTED   1337401710

SYS@book> alter database open ;
Database altered.

SYS@book> ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/ramdisk/book/temp01.dbf' REUSE;
Tablespace altered.

SYS@book> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/archivelog/book/
Oldest online log sequence     927
Next log sequence to archive   929
Current log sequence           929

SYS@book> select name,open_mode,dbid,db_unique_name from v$database;
NAME OPEN_MODE        DBID DB_UNIQUE_NAME
---- ---------- ---------- ---------------
BOOK READ WRITE 1337401710

--//有点奇怪的是这样恢复的DB_UNIQUE_NAME是空。
SYS@book> show parameter DB_UNIQUE_NAME
NAME           TYPE   VALUE
-------------- ------ ------
db_unique_name string book

--//估计建立的控制文件一些信息没有填充,我记忆里面第1次启动要改写控制文件内容写入DB_UNIQUE_NAME,也许重启数据库就ok了。
SYS@book> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@book> startup mount
ORACLE instance started.
Total System Global Area  643084288 bytes
Fixed Size                  2255872 bytes
Variable Size             205521920 bytes
Database Buffers          427819008 bytes
Redo Buffers                7487488 bytes
Database mounted.
SYS@book> select name,open_mode,dbid,db_unique_name from v$database;
NAME OPEN_MODE       DBID DB_UNIQUE_NAME
---- --------- ---------- --------------
BOOK MOUNTED   1337401710 book

--//OK.实际上这个问题就在于一台服务器运行多个实例,登录会话之间切来切去,很容易搞乱。
--//在执行前小心验证就不会出现这个情况了。建立standby redo。
-- The following script can be used on the standby database
-- to re-populate entries for a standby controlfile created
-- on the primary and copied to the standby site.
----------------------------------------------------------
ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb01.log' SIZE 50M BLOCKSIZE 512 REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb02.log' SIZE 50M BLOCKSIZE 512 REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb03.log' SIZE 50M BLOCKSIZE 512 REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb04.log' SIZE 50M BLOCKSIZE 512 REUSE;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2684913/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969586