天天看點

oracle工具之nid指令的使用

   當我們手動copy了整個資料庫,并通過重建控制檔案給資料庫指定了新的dbname,但是卻不能給資料庫配置設定新的dbid.對于以上問題我們可以通過nid指令來對資料庫配置設定一個全新的dbid。同時需要注意rman也是通過dbid來區分資料庫。

一 指令解釋

[oracle@source ~]$ nid  help=yes

DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:09:50 2013

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

Keyword     Description                    (Default)

----------------------------------------------------

TARGET      Username/Password              (NONE)    指定連接配接資料庫的使用者名和密碼

DBNAME      New database name              (NONE)  DBNAME=new_db_name 改變資料庫的名字  

LOGFILE     Output Log                     (NONE) LOGFILE=logfile指定輸出消息到指定的日志檔案,預設nid覆寫之前的日子檔案

REVERT      Revert failed change           NO  指定yes表明更改dbid失敗時能夠恢複之前的狀态

SETNAME     Set a new database name only   NO  指定yes表明僅僅更改資料庫db_name

APPEND      Append to output log           NO  指定yes辨別輸出追加到已經存在的日志檔案

HELP        Displays these messages        NO  指定yes顯示幫助資訊

注意:可以同時更改資料庫的dbid和db_name,也可以僅改變資料庫的db_name、抑或僅更改資料庫的dbid。文法分别如下:

改變dbid和db_name : nid target=sys/dhhzdhhz  dbname=crm_test (也可以target=/)

僅改變db_name:  nid target=sys/dhhzdhhz dbname=crm_test  setname=yes (也可以target=/)

僅更改dbid: nid target=sys/dhhzdhhz (也可以target=/)

二 使用nid的注意事項

1 確定有能夠對資料庫進行完全恢複的備份。

2 確定執行更改dbid操作時資料庫處于mounted狀态且mounted之前資料庫是經過shutdown immediate關閉的。

3 使用nid更改資料庫的dbid後,資料庫需要alter database open resetlogs啟動,啟動之後須對資料庫進行一次全備份,因為之前的備份和歸檔已經不能再使用了。

4 使用nid更改資料庫dbname後,需更改初始化參數檔案中的DB_NAME參數并重建密碼檔案。

5 使用nid不能更改全局資料庫名。

6 確定所有資料檔案處于online狀态且不需要恢複。

7 盡量確定oracle沒有離線的資料檔案和隻讀表空間,如果有使其正常化。

三 舉兩個例子

eg1:僅更改資料庫dbid

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area 1252663296 bytes

Fixed Size                  2226072 bytes

Variable Size             922749032 bytes

Database Buffers          318767104 bytes

Redo Buffers                8921088 bytes

Database mounted.

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@source ~]$ nid target=sys

DBNEWID: Release 11.2.0.2.0 - Production on Wed Dec 4 23:39:11 2013

Password:

Connected to database CRM (DBID=3599153036)

Connected to server version 11.2.0

Control Files in database:

   /oracle/CRM/control03.ctl

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

Proceeding with operation

Changing database ID from 3599153036 to 3641774948

   Control File /oracle/CRM/control03.ctl - modified

   Datafile /oracle/CRM/system01.db - dbid changed

   Datafile /oracle/CRM/sysaux01.db - dbid changed

   Datafile /oracle/CRM/zx.db - dbid changed

   Datafile /oracle/CRM/users01.db - dbid changed

   Datafile /oracle/CRM/pos.db - dbid changed

   Datafile /oracle/CRM/erp.db - dbid changed

   Datafile /oracle/CRM/user01.db - dbid changed

   Datafile /oracle/CRM/undotbs03.db - dbid changed

   Datafile /oracle/CRM/crm.db - dbid changed

   Datafile /oracle/CRM/jxc.db - dbid changed

   Datafile /oracle/CRM/temp01.db - dbid changed

   Control File /oracle/CRM/control03.ctl - dbid changed

   Instance shut down

Database ID for database CRM changed to 3641774948.

All previous backups and archived redo logs for this database are unusable.

Database has been shutdown, open database with RESETLOGS option.

Succesfully changed database ID.

DBNEWID - Completed succesfully.

[oracle@source ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Wed Dec 4 23:47:21 2013

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

Connected to an idle instance.

SQL> startup  mount;

SQL> alter database open resetlogs;

Database altered.

SQL> select dbid,name from v$database;

     DBID NAME

---------- ---------

3641774948 CRM

eg2 :僅更改資料庫db_name

oracle@source ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:11:03 2013

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

SQL> select open_mode from v$database;

OPEN_MODE

--------------------

READ WRITE

Variable Size             905971816 bytes

Database Buffers          335544320 bytes

oracle@source ~]$ nid target=sys dbname=CRM_TEST setname=YES

DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:24:58 2013

Connected to database CRM (DBID=3641774948)

Change database name of database CRM to CRM_TEST? (Y/[N]) => y

Changing database name from CRM to CRM_TEST

   Datafile /oracle/CRM/system01.db - wrote new name

   Datafile /oracle/CRM/sysaux01.db - wrote new name

   Datafile /oracle/CRM/zx.db - wrote new name

   Datafile /oracle/CRM/users01.db - wrote new name

   Datafile /oracle/CRM/pos.db - wrote new name

   Datafile /oracle/CRM/erp.db - wrote new name

   Datafile /oracle/CRM/user01.db - wrote new name

   Datafile /oracle/CRM/undotbs03.db - wrote new name

   Datafile /oracle/CRM/crm.db - wrote new name

   Datafile /oracle/CRM/jxc.db - wrote new name

   Datafile /oracle/CRM/temp01.db - wrote new name

   Control File /oracle/CRM/control03.ctl - wrote new name

Database name changed to CRM_TEST.

Modify parameter file and generate a new password file before restarting.

Succesfully changed database name.

SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:25:33 2013

SQL> startup nomount;

SQL> alter system set db_name=CRM_TEST scope=spfile;

System altered.

[oracle@source ~]$orapwd file="$ORACLE_HOME/dbs/orapw$ORACLE_SID" password=dhhzdhhz force=y

[oracle@source dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:34:40 2013

SQL> startup force open;

Database opened.

3641774948 CRM_TEST

本文轉自 zhangxuwl 51CTO部落格,原文連結:http://blog.51cto.com/jiujian/1336559,如需轉載請自行聯系原作者