Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

Oracle12cの用語に関して分かりにくいものを脳内からアウトプットしてみる。

概要

OracleDataBaseの用語でごっちゃごちゃになるので、書き出して見た。間違っている可能性もあるので、その辺りはご注意ください。

また、インスタンス名の変更などによりパスワードファイルの再作成が必要となります。パスワードファイルを再作成しないとパスワード認証による接続ができなくなる模様です。現にこれは私の端末で起こっていることです。 listener.ora内のSID_LISTの設定が消えている? 色々いじっていたらローカル接続すら出来なくなったので、OracleDBを再構築しました。非常に悲しい。

対象は

  • Oracle12c

です。

脳内出力

データベース

  • CREATE DATABASEで作成されるもの。
  • ディスク上に存在する。
  • データに該当?
  • インスタンスに関連づけられる。

グローバルデータベース名

  • デフォルトはDB_UNIQUE_NAME.DB_DOMAIN
  • データベースを一意に識別する名前

確認方法

SELECT global_name FROM global_name

変更方法

ALTER DATABASE RENAME GLOBAL_NAME TO < 新しい名前 >

データベース名

  • CREATE DATABASE文で指定された名前

確認方法

SELECT name FROM v$database

変更方法

データベースをシャットダウン→マウントで起動(SQLPLUSで実行)

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

SHUTDOWNした時点で誤ってSQLPLUSから抜けてしまった際は

sqlplus / AS SYSDBA /* ORACLE_SIDが設定されていること */

で接続する。

SQLPLUSから抜けて実行

 nid target=sys/< password > dbname=< 新しい名前 > SETNAME=YES
  • SETNAME=YESがないと、DBIDとかいうものまで変わって大変な目に合う模様。
  • DBNAMEは8文字までみたい。

$ORACLE_HOME/dbs/init< 古い名前 >.oraの「古い名前」の記述を更新(エディタで更新)

*.db_name='< 新しい名前 >'

SPファイルを作ってデータベースをオープン。

CREATE SPFILE FROM PFILE;
STARTUP OPEN;

インスタンス

  • データベースに関連づけられるもの。
  • プロセスに該当?
  • インスタンスごとにパラメータが設定される。
  • 一つのデータベースに対して、複数のインスタンスを立ち上げることが可能(RAC構成)。

インスタンス

  • ホスト外部から、インスタンスを識別するための名前。
    • ホスト外部=SQLPLUSなどでの接続。
  • デフォルトは「INSTANCE_NAME初期化パラメータ」=「SID」
    • シングル構成の場合は「データベース名」と同意な模様。

確認方法

SHOW PARAMETERS instance_name;

変更方法

ALTER SYSTEM SET INSTANCE_NAME='< 新しいインスタンス名 >' SCOPE=SPFILE; 

備考

SELECT instance_name FROM v$instance;

では、SIDの名前が表示される(show parameter instance_nameと別の値が表示される)。instance_nameというのにSIDが返される。ギアッチョ案件。

Oracleシステム識別子(SID)

確認方法

SELECT instance_name FROM v$instance;
SELECT instance FROM v$thread;

変更方法

  1. データベースをシャットダウンする。
  2. $ORACLE_HOME/dbs/spfile< 古いSID >.oraをコピーし、$ORACLE_HOME/dbs/spfile< 新しいSID >.oraを作成する。
  3. 環境変数ORACLE_SID」を「古いSID」から「新しいSID」に変更する。
  4. /etc/oratab内の「古いSID」の記述を「新しいSID」に変更する。
  5. データベースを起動する。

CDBのコンテナ名

変更方法

CDB$ROOTで固定?(変更不可?)

確認方法

SELECT * FROM v$containers WHERE con_id = 1;

PDBのコンテナ名

確認方法

SELECT * FROM v$pdbs;

変更方法

制限モードでPDBをオープン

ALTER PLUGGABLE DATABASE < PDB名 > OPEN RESTRICTED;

PDBに切り替え

ALTER SESSION SET CONTAINER = < 古いコンテナ名 >;

コンテナ名を変更

ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO < 新しいコンテナ名 >;

新しいコンテナ名をシングルコーテーションで囲むと

ORA-01729: データベース・リンク名が必要です。

が発生する。

備考

PDBのコンテナ名=PDBのサービス名。の模様。

リスナー

  • リクエストごとにサーバープロセスを作成する。
  • ポート番号1521(デフォルト)でリクエストを待ち受ける。
  • リスナーは起動中のデータベースを自動的に認識し、自身に登録する。

確認方法

OSコマンド

lsnrctl status     

サービス名

  • リスナーに登録されたインスタンスを識別する名前。
  • デフォルトはグローバルデータベース名。
  • 一つのサービス名に複数のインスタンスを設定できる。

確認方法

SELECT * FROM v$services;
SHOW PARAMETERS SERVICE_NAMES;

変更方法

ALTER SYSTEM SET service_names = '< 新しいサービス名 >'

ドメイン

  • 変更可能

確認方法

SHOW PARAMETERS db_domain;

変更方法

ALTER SYSTEM SET db_domain = '< 新しいドメイン名 >' SCOPE=SPFILE;

その他

  • デフォルト表領域 = デフォルト永続表領域
  • トランスポータブル表領域 = 表領域の種類を表す名前じゃなくて、機能名
    • 特定の表領域を高速に移動できる機能。

まとめ

覚えることいっぱいな上に、似ている単語とか色々ありすぎて脳みそ溶け出しそう。

とりあえず各設定のデフォルト値に別の設定値を利用していたりするのが混乱の原因。当たり前だけど、本質的には各設定値は別物となっていることが良く分かりました。