オラクる。

oracle専門ブログにしてみようかな~っと

カテゴリ:oracle > 12c

マルチテナント環境のバックアップはcdbに接続してコンテナ全体をバックアップする方法と、pdbを個別にバックアップする方法、もしくはpdbに接続して、対象のpdbをバックアップする方法があります。

[oracle@DB01 ~]$ rman

Recovery Manager: Release 12.1.0.2.0 - Production on 日 8月 14 00:28:29 2016

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

RMAN> connect target /

ターゲット・データベース: CDB1 (データベースID=893188380)に接続されました

RMAN> BACKUP DATABASE;

backupが開始されました(開始時間: 16-08-14)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=276 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル・ファイル番号=00003 名前=+DATA/cdb1/sysaux01.dbf
入力データファイル・ファイル番号=00001 名前=+DATA/cdb1/system01.dbf
入力データファイル・ファイル番号=00004 名前=+DATA/cdb1/undotbs01.dbf
入力データファイル・ファイル番号=00006 名前=+DATA/cdb1/users01.dbf
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました

(中略)

入力データファイル・ファイル番号=00017 名前=/data1/pdb3/DATAFILE/sysaux.30-PDB2.919470981
入力データファイル・ファイル番号=00016 名前=/data1/pdb3/DATAFILE/system.30-PDB2.919470981
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました
ピース・ハンドル=+FRA/CDB1/39B47E640E0E7E94E053C60911ACD1FD/BACKUPSET/2016_08_14/nnndf0_tag20160814t002911_0.608.919816763 タグ=TAG20160814T002911 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:02:45
backupが完了しました(完了時間: 16-08-14)

Control File and SPFILE Autobackupが開始されました(開始時間: 16-08-14)
ピース・ハンドル=+FRA/CDB1/AUTOBACKUP/2016_08_14/s_919816928.559.919816941 コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 16-08-14)

RMAN> BACKUP ARCHIVELOG ALL;

backupが開始されました(開始時間: 16-08-14)
現在のログがアーカイブされました。
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: アーカイブ・ログ・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにアーカイブ・ログを指定しています
入力アーカイブ・ログ・スレッド=1 順序=60 レコードID=45 スタンプ=919817113
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました
ピース・ハンドル=+FRA/CDB1/BACKUPSET/2016_08_14/annnf0_tag20160814t004514_0.573.919817115 タグ=TAG20160814T004514 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:07
backupが完了しました(完了時間: 16-08-14)

Control File and SPFILE Autobackupが開始されました(開始時間: 16-08-14)
ピース・ハンドル=+FRA/CDB1/AUTOBACKUP/2016_08_14/s_919817124.607.919817141 コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 16-08-14)


まずはルートコンテナに接続し、バックアップコマンドを実行します。
ルートコンテナと全pdbがバックアップされます。

RMAN> BACKUP PLUGGABLE DATABASE "PDB1"
2> PLUS ARCHIVELOG;


backupが開始されました(開始時間: 16-08-14)
現在のログがアーカイブされました。
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: アーカイブ・ログ・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにアーカイブ・ログを指定しています
入力アーカイブ・ログ・スレッド=1 順序=61 レコードID=46 スタンプ=919817288
入力アーカイブ・ログ・スレッド=1 順序=62 レコードID=47 スタンプ=919817887
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました
ピース・ハンドル=+FRA/CDB1/BACKUPSET/2016_08_14/annnf0_tag20160814t005807_0.607.919817889 タグ=TAG20160814T005807 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 16-08-14)

(中略)

backupが開始されました(開始時間: 16-08-14)
現在のログがアーカイブされました。
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: アーカイブ・ログ・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにアーカイブ・ログを指定しています
入力アーカイブ・ログ・スレッド=1 順序=63 レコードID=48 スタンプ=919817999
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました
ピース・ハンドル=+FRA/CDB1/BACKUPSET/2016_08_14/annnf0_tag20160814t010000_0.609.919818001 タグ=TAG20160814T010000 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:04
backupが完了しました(完了時間: 16-08-14)

Control File and SPFILE Autobackupが開始されました(開始時間: 16-08-14)
ピース・ハンドル=+FRA/CDB1/AUTOBACKUP/2016_08_14/s_919818005.610.919818015 コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 16-08-14)


ルートコンテナに接続した状態でpdbを個別にバックアップを取得しています。
BACKUP PLUGGABLE DATABASE~コマンドで実行可能です。

RMAN> connect target sys@pdb1

ターゲット・データベースのパスワード:
ターゲット・データベース: CDB1 (データベースID=893188380)に接続されました

RMAN> BACKUP DATABASE;

backupが開始されました(開始時間: 16-08-14)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=274 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル・ファイル番号=00009 名前=/data1/CDB1/39A6B2E1CBF13BD7E053C60911AC0723/datafile/o1_mf_sysaux_ctmztj2c_.dbf
入力データファイル・ファイル番号=00008 名前=/data1/CDB1/39A6B2E1CBF13BD7E053C60911AC0723/datafile/o1_mf_system_ctmzthvq_.dbf
チャネルORA_DISK_1: ピース1(16-08-14)を起動します
チャネルORA_DISK_1: ピース1(16-08-14)が完了しました
ピース・ハンドル=+FRA/CDB1/39A6B2E1CBF13BD7E053C60911AC0723/BACKUPSET/2016_08_14/nnndf0_tag20160814t172558_0.601.919877159 タグ=TAG20160814T172558 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:55
backupが完了しました(完了時間: 16-08-14)

Control File and SPFILE Autobackupが開始されました(開始時間: 16-08-14)
ピース・ハンドル=+FRA/CDB1/39A6B2E1CBF13BD7E053C60911AC0723/AUTOBACKUP/2016_08_14/s_919877214.600.919877217 コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 16-08-14)


pdbに接続した状態で、全体のバックアップを取得します。
これは接続したpdb個別のバックアップが取得されます。

マルチテナント環境時のユーザーとロールにはコンテナ全体に共通のものと、各PDBに存在するローカルなものがあります。

SQL> create user c##x identified by password;

ユーザーが作成されました。


全体に共通のユーザーを作成する場合はルートのコンテナに接続しユーザーを行ないます。
ユーザー名に「c##」を付与する必要があります。

SQL> alter session set container=pdb1;

セッションが変更されました。

SQL> create user x identified by password;

ユーザーが作成されました。


pdbに接続し作成するユーザーはpdb内のローカルなユーザーになります。

SQL> column username format a20
SQL> select username, common from dba_users;



C##X                 YES
X                    NO


dba_usersビューでユーザーの情報を確認します。
common列がYESの場合は共通ユーザー
NOの場合はローカルユーザーです
共通ユーザーは全PDBに存在するユーザーです。

SQL> alter session set container=cdb$root;

セッションが変更されました。

SQL> create role c##r;

ロールが作成されました。


全体に共通のロールもルートのコンテナに接続し作成します。
同じように「c##」を先頭に付与します。

SQL> alter session set container=pdb1;

セッションが変更されました。

SQL> create role r;

ロールが作成されました。

pdbに接続し、pdbにローカルなロールを作成しています。

SQL> grant r to c##x;

権限付与が成功しました。


ローカルなロールを共通ユーザーに付与することが出来ます。

SQL> grant c##r to x, c##x;

権限付与が成功しました。


また共通ロールはローカルユーザーにも共通ユーザーにも付与することが出来ます。

SQL> grant c##r to c##x container=all;

権限付与が成功しました。

共通ロールを共通ユーザーに付与しています。
「container=all」を付与すると、全PDBの共通ユーザーにその設定が反映されます。

マルチテナントのデータベースでは初期化パラメーターはCDBで管理します。
しかし、一部の初期化パラメーターはPDBごとに異なった値を設定することが出来ます。

SQL> column NAME format a20
SQL> column VALUE format a10
SQL> SELECT con_id, name, value, ispdb_modifiable
  2  FROM v$system_parameter WHERE name='open_cursors';

    CON_ID NAME                 VALUE      ISPDB
---------- -------------------- ---------- -----
         0 open_cursors         300        TRUE


cdb$rootに接続した状態で初期化パラメーターopen_cursorsを確認します。
300が設定されていることがわかります。
また、「ISPDB」にTRUEが設定されているのでPDBごとに値を設定できることがわかります。

SQL> ALTER SESSION SET CONTAINER=pdb1;

セッションが変更されました。

SQL> ALTER SYSTEM SET open_cursors=100;

システムが変更されました。

SQL> SELECT con_id, name, value, ispdb_modifiable
  2  FROM v$parameter WHERE name='open_cursors';

    CON_ID NAME                 VALUE      ISPDB
---------- -------------------- ---------- -----
         3 open_cursors         100        TRUE

PDBに接続し、open_cursorsを変更します。
現在接続しているコンテナの初期化パラメーターはv$parameterで確認できます。

SQL> ALTER SESSION SET CONTAINER=cdb$root;

セッションが変更されました。

SQL> SELECT con_id, name, value, ispdb_modifiable
  2  FROM v$system_parameter WHERE name='open_cursors';

    CON_ID NAME                 VALUE      ISPDB
---------- -------------------- ---------- -----
         0 open_cursors         300        TRUE
         3 open_cursors         100        TRUE


再度、rootコンテナに戻り、v$system_parameterビューを確認します。
cdb$rootの300が設定されているのに対して、pdb1(con_id:3)に100が設定されています。
pdb1のopen_cursors値は100になります。

12cで進化した管理ツールSQL Developerを利用してプラガブルデータベース(PDB)をクローンしてみます。
SQL Developerは下記からダウンロードできます。
特にインストール作業の必要は無く、zipファイルを解凍して、sqldeveloper.exeを実行する起動します。

Oracle SQL Developer ダウンロード
http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html

000001

SQL Developerを起動し、コンテナDBに接続します。
DBAに接続を追加すると、プラガブルDBが表示されるので、そこを右クリックし状態の変更を選択します。
PDBをクローンする場合はPDBの状態をREAD ONLYにする必要があります。

000002

新しい状態がcloseとなっていることを確認し、適用ボタンをクリックします。

000003

再度状態の変更を選択し、新しい状態がOPEN、状態のオプションがREAD ONLYとなっていることを確認し適用ボタンをクリックします。
これでクローン元のPDBがREAD ONLYの状態になりました。

000004

さて、クローンをしましょう。
先ほどREAD ONLYに状態変更したPDBで右クリックし、「プラガブルデータベースのクローン作成」を選択します。

000005

新しいデータベース名、必要ならばファイル名の変換規則を指定し適用ボタンをクリックします。
PDBのクローンが介します。

000006

クローンが完了しました。

000007

新しいPDBが作成されたことが確認できました。

dbcaではなく、sqlplusでcdbを作ってみます。
バージョンはもちろん12cです。

[oracle@DB01 ~]$ cd /u01/app/oracle/product/12.1.0/dbhome_1/dbs/
[oracle@DB01 dbs]$ mkdir /u01/app/oracle/oradata
[oracle@DB01 dbs]$ vi initcdb1.ora
[oracle@DB01 dbs]$ cat initcdb1.ora
db_create_file_dest='/u01/app/oracle/oradata'
db_name=cdb1
enable_pluggable_database=true

まずは初期化パラメーターファイルを作成します。
enable_pluggable_database=trueでdbがコンテナ化されます。

[oracle@DB01 dbs]$ export ORACLE_SID=cdb1
[oracle@DB01 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on 火 8月 9 00:24:54 2016

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

アイドル・インスタンスに接続しました。


SQL> STARTUP NOMOUNT;
ORACLEインスタンスが起動しました。

Total System Global Area  289406976 bytes
Fixed Size                  2923536 bytes
Variable Size             230687728 bytes
Database Buffers           50331648 bytes
Redo Buffers                5464064 bytes


sqlplusで接続し、nomount状態で起動します。
(またDBを作成していないので・・・)

CREATE DATABASE cdb1 ENABLE PLUGGABLE DATABASE
SEED SYSTEM DATAFILES SIZE 125M
     SYSAUX DATAFILES SIZE 100M;


そして、「ENABLE PLUGGABLE DATABASE」を指定して、さらにSEED DBのサイズを指定し、create databaseします。

SQL> @catalog.sql
SQL> @catproc.sql


カタログとプロシージャを作成するsqlを実行します。
時間かかります。

これでコンテナのデータベースが作成されました。

[oracle@DB01 dbs]$ cat initcdb1.ora
db_create_file_dest='/u01/app/oracle/oradata'
db_name=cdb1
enable_pluggable_database=true

control_files = (/u01/app/oracle/oradata/CDB1/controlfile/o1_mf_ctk96g55_.ctl)

初期化パラメーターファイルにコントロールファイルの場所を書き込みます。

SQL> startup pfile=/u01/app/oracle/product/12.1.0/dbhome_1/dbs/initcdb1.ora
ORACLEインスタンスが起動しました。

Total System Global Area  289406976 bytes
Fixed Size                  2923536 bytes
Variable Size             230687728 bytes
Database Buffers           50331648 bytes
Redo Buffers                5464064 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> create spfile from pfile;

ファイルが作成されました。


その初期化パラメーターファイルを利用してdbを起動、create spfileします。
これで、shutdown、startup出来れば問題無しです。

このページのトップヘ