DBIDとは
Oracle Database はデータベース作成時(CREATE DATABASE 文実行時)に指定した名前に加えて一意な ID 番号が割り当てられます。この番号を DBID と呼びます。DBID は管理者が指定することはできず、自動生成されます。データベース名と DBID は V$DATABASE ビューで確認できます。
SQL> SELECT NAME, DBID FROM V$DATABASE;
NAME DBID
--------- ----------
O21A 2376064149
データベース名は初期化パラメーター db_name でも確認できます。この初期化パラメーターは変更できません。
SQL> SHOW PARAMETER db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string O21A
DBID は Data Guard を構成するデータベース間では同一ですが、それ以外のデータベースでは別の値になります。DBID は制御ファイル、データファイル、アーカイブログ等に埋め込まれているため別のデータベースのファイルを誤って使ってしまうことを防ぐことができます。
DBNEWID ユーティリティの実行方法と条件
何等かの理由でデータベース名と DBID を変更する必要が出てきた場合、DBNEWID ユーティリティを使います。このユーティリティは Linux 環境では nid コマンドとして実装されています。nidコマンドには以下のオプションを指定します。オプションを指定しないか、HELP=YES を指定すると利用方法が表示されます。
オプション | 説明 | デフォルト値 |
---|---|---|
TARGET | ユーザー名/パスワード | NONE |
DBNAME | 新規データベース名 | NONE |
LOGFILE | 出力ログ | NONE |
REVERT | 失敗した変更を回復 | NO |
SETNAME | 新規データベース名のみを設定 | NO |
APPEND | 出力ログに追加 | NO |
HELP | これらのメッセージを表示 | NO |
nid コマンドを実行するには対象インスタンスが「正常に」停止した後、MOUNT 状態で起動されている必要があります。以下の例ではインスタンスが OPEN 状態で nid コマンドを実行してエラーになっています。
SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
OPEN
SQL> EXIT
$ nid TARGET=SYS DBNAME=O21A
DBNEWID: Release 21.0.0.0.0 - Production on 水 12月 14 22:42:36 2022
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
パスワード:
データベースO21B(DBID=2414682024)に接続しました
NID-00121: データベースをオープンしないでください
データベース名の変更は、検証中に失敗しました - データベースは変更されていません。
DBNEWID - 完了しましたが、検証エラーがあります。
次に ABORT 指定でインスタンスを停止して nid コマンドを実行していますが、やはり失敗しています。
SQL> SHUTDOWN ABORT
ORACLEインスタンスがシャットダウンされました。
SQL> STARTUP MOUNT
ORACLEインスタンスが起動しました。
Total System Global Area 1644166648 bytes
Fixed Size 9686520 bytes
Variable Size 1023410176 bytes
Database Buffers 603979776 bytes
Redo Buffers 7090176 bytes
データベースがマウントされました。
SQL> EXIT
$ nid TARGET=SYS DBNAME=O21B
DBNEWID: Release 21.0.0.0.0 - Production on 水 12月 14 22:51:20 2022
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
パスワード:
データベースO21A(DBID=2376064149)に接続しました
NID-00135: 1個のアクティブ・スレッドがあります
データベース名の変更は、検証中に失敗しました - データベースは変更されていません。
DBNEWID - 完了しましたが、検証エラーがあります。
DBNEWID ユーティリティの実行例
データベース名を O21A から O21B に変更し、新しい DBID を採番します。このため nid コマンドに DBNAME オプションを指定しています。
パスワードの入力と、実行の確認プロンプトが表示されます。コマンドが正常に実行されるとインスタンスは停止します。
$ nid TARGET=SYS DBNAME=O21B
DBNEWID: Release 21.0.0.0.0 - Production on 水 12月 14 22:35:15 2022
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
パスワード:
データベースO21A(DBID=2344598892)に接続しました
サーバー・バージョン21.3.0に接続しました
データベースの制御ファイル:
/u01/app/oracle/oradata/O21A/control01.ctl
/u01/app/oracle/oradata/O21A/control02.ctl
データベースIDと、データベース名O21AをO21Bに変更しますか。 (Y/[N]) => Y
操作続行中
データベースIDを2344598892から2414682024に変更しています
データベース名をO21AからO21Bに変更しています
制御ファイル/u01/app/oracle/oradata/O21A/control01.ctl - 変更済です
制御ファイル/u01/app/oracle/oradata/O21A/control02.ctl - 変更済です
データファイル/u01/app/oracle/oradata/O21A/system01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/pdbseed/system01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/sysaux01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/pdbseed/sysaux01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/undotbs01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/pdbseed/undotbs01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/users01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb1/system01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb1/sysaux01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb1/undotbs01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb1/users01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb2/system01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb2/sysaux01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb2/undotbs01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb2/users01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/temp01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/pdbseed/temp01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb1/temp01.db - DBIDが変更されました。新規名が書き込まれました
データファイル/u01/app/oracle/oradata/O21A/O21Apdb2/temp01.db - DBIDが変更されました。新規名が書き込まれました
制御ファイル/u01/app/oracle/oradata/O21A/control01.ctl - DBIDが変更されました。新規名が書き込まれました
制御ファイル/u01/app/oracle/oradata/O21A/control02.ctl - DBIDが変更されました。新規名が書き込まれました
インスタンスが停止しました
データベース名がO21Bに変更されました。
再起動の前に、パラメータ・ファイルを変更し、新規パスワード・ファイルを生成してください。
データベースO21BのデータベースIDが、2414682024に変更されました。
このデータベースに関する以前のすべてのバックアップとアーカイブREDOログは使用できません。
データベースが停止しています。RESETLOGSオプションを指定してオープンしてください。
データベース名とIDの変更が正常に終了しました。
DBNEWID - 正常に完了しました。
コマンド実行後はREDOログ、アーカイブログファイルは DBID が異なるため利用できません。初期化パラメーター・ファイル、パスワード・ファイルを作成してからRESETOPENLOGS オプションを使ってインスタンスを起動します。
SQL> STARTUP MOUNT
ORACLEインスタンスが起動しました。
Total System Global Area 1644166648 bytes
Fixed Size 9686520 bytes
Variable Size 402653184 bytes
Database Buffers 1224736768 bytes
Redo Buffers 7090176 bytes
データベースがマウントされました。
SQL> ALTER DATABASE OPEN RESETLOGS;
データベースが変更されました。
SQL> SELECT DBID,NAME FROM V$DATABASE;
DBID NAME
---------- ---------
2414682024 O21B