2013年8月21日 (水)

PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #3 - 消えたPDBの初期化パラメータの謎... Truth is out there.

CDB、PDBの各データベースで変更可能な初期化パラメータを変更してもspfileに書き出しているのはCDBのパラメータだけなのです。

spfileのタイムスタンプを確認してもCDBの時だけしかタイムスタンプは更新されません。もちろん心の目で見てもw

同じことで不思議に感じている方々も多いようです
Living with Oracle / oracle 12c database - pluggable database and spfile/parameter - how does that work?

いったい、どこに書き込んでるんでしょう....

PDB個別に設定した初期化パラメータは、spfileに書き込まれていないのは確かです。

どこかしらない、Cloud上に書いてくれちゃってるのでしょうかw 12c だけに... (ありえんw たぶん...

ということは、DBに書くしかないじゃないですか! 


どうやって調べるか....

あ、そうだ、 alter database set system hogehoge = xxxx scope=spfile をPDBでタイプしてるところを、心の目で見ればいいんだ :)

dbms_monitor.session_trace_enable.............awrレポートでも見えるわな、これw なんで気づかんのだ、俺 ><

....


見つけた

SYS@orcl12c> show con_name

CON_NAME
------------------------------
CDB$ROOT
SYS@orcl12c> select table_name from dba_tables where table_name like '%SPFILE%';

TABLE_NAME
------------------------------
PDB_SPFILE$


SYS@orcl12c> conn sys@pdborcl as sysdba
パスワードを入力してください:
接続されました。
SYS@pdborcl> show con_name

CON_NAME
------------------------------
PDBORCL
SYS@pdborcl> select table_name from dba_tables where table_name like '%SPFILE%';

TABLE_NAME
------------------------------
PDB_SPFILE$


SYS@pdborcl> conn sys@pdbdiscus as sysdba
パスワードを入力してください:
接続されました。
SYS@pdbdiscus> show con_name

CON_NAME
------------------------------
PDBDISCUS
SYS@pdbdiscus> select table_name from dba_tables where table_name like '%SPFILE%';

TABLE_NAME
------------------------------
PDB_SPFILE$


PDB_SPFILE$というSYSユーザの表の書き込んでいました!

CDBのPDB_SPFILE$を覗いてみます。

SYS@orcl12c> show con_name

CON_NAME
------------------------------
CDB$ROOT
SYS@orcl12c> l
1 select
2 db_uniq_name
3 ,sid
4 ,pdbs.name as "PDB NAME"
5 ,psf.name as "PARAMETER NAME"
6 ,value$
7 from
8 pdb_spfile$ psf
9 join v$pdbs pdbs
10 on
11 psf.pdb_uid = pdbs.con_uid
12 order by
13 db_uniq_name
14 ,sid
15 ,pdbs.name
16 ,psf.name
17*
SYS@orcl12c> /

DB_UNIQ_NAME SID PDB NAME PARAMETER NAME VALUE$
-------------- -------------- -------------- ------------------------------ --------------------------------------------------
orcl12c * PDBDISCUS open_cursors 500

DB_UNIQ_NAME SID PDB NAME PARAMETER NAME VALUE$
-------------- -------------- -------------- ------------------------------ --------------------------------------------------
orcl12c * PDBORCL open_cursors 200

いました! いましたよ〜〜〜〜。 PDBで設定した初期化パラメータが! (ちなみに、alter system resetコマンドで上記表から削除されます!)


実は、謎は、まだまだ、続くんです。

上記クエリはCDB上で実行しました。 PDB上で設定した初期化パラメータなのだから、PDB側のpdb_spfile$には対象PDBの初期化パラメータが見えるはず...

PDB上のpdb_spfile$を問い合わせてみると.....

SYS@pdborcl> show con_name

CON_NAME
------------------------------
PDBORCL

SYS@pdborcl> select name,value$ from pdb_spfile$;

レコードが選択されませんでした。


SYS@pdbdiscus> show con_name

CON_NAME
------------------------------
PDBDISCUS

SYS@pdbdiscus> select name,value$ from pdb_spfile$;

レコードが選択されませんでした。

むむ! むむむむむむ!!!!! 私個人は実に普通というか常識的な想像を働かせてPDB上のpdb_spfile$表を覗いたのに、裏切られた!!!

PDB側で設定した初期化パラメータなのにPDB側のpdb_spfile$表には格納されていなんです。 CDB側のpdb_spfile$しか格納されていません。(実はBugなんてことはないですよね)

俺の初期化パラメータなのに!


部下の手柄は上司の手柄....的なw いや〜〜〜な感じですね。


PDB側のpdb_spfile$表には、いつ初期化パラメータが入るのでしょうか?

それとも、いまの仕様では入ることはない....まだ見ぬ先のリリースでは利用されるのでしょうか....謎は深まる。というか気になって寝れないw 

何か気づいたら。続きはあるかもしれません. 一旦シリーズ終了 :)




PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #1
PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #2 - PDBの初期化パラメータは何処!?

| | コメント (0) | トラックバック (0)

2013年8月20日 (火)

PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #2 - PDBの初期化パラメータは何処!?

制限はあるものの、PDBごとに変更可能な初期化パラメータの存在は確認できました。 :)

試してみます!

CDBのOPEN_CURSORSを変更してみます。
他のPDBで変更していないのでCDBの値が継承されるはずです。

$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 月 8月 19 23:12:19 2013

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

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

SYS@orcl12c> startup
ORACLEインスタンスが起動しました。

Total System Global Area 534462464 bytes
Fixed Size 2290416 bytes
Variable Size 473959696 bytes
Database Buffers 50331648 bytes
Redo Buffers 7880704 bytes
データベースがマウントされました。
データベースがオープンされました。
SYS@orcl12c> alter pluggable database all open;

プラガブル・データベースが変更されました。

SYS@orcl12c>
SYS@orcl12c> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 300
SYS@orcl12c>
SYS@orcl12c> alter system set open_cursors=400 scope=both;

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

SYS@orcl12c> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 400
SYS@orcl12c>


PDBの初期化パラメータ値はCDBの初期化パラメータ値を継承しています!

SYS@orcl12c> conn sys@pdborcl as sysdba
パスワードを入力してください:
接続されました。
SYS@pdborcl>
SYS@pdborcl> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 400


PDBの初期化パラメータを変更してみます。(MEMORYとSPFILEを変更)

SYS@pdborcl> alter system set open_cursors=200 scope=both;

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

SYS@pdborcl> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 200

変更できますね :)


ついでなので、もひとつのPDBの初期化パラメータも他の値に変更してみます。(同じくscope=bothで)

変更前なのでOPEN_CURSORSパラメータはCDBの同パラメータを継承しています!

SYS@pdborcl> conn sys@pdbdiscus as sysdba
パスワードを入力してください:
接続されました。
SYS@pdbdiscus>
SYS@pdbdiscus> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 400

400から500に増やてみます。

SYS@pdbdiscus> alter system set open_cursors=500 scope=both;

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

SYS@pdbdiscus> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 500

問題なく変更できました。:)  順調、順調


SQL*Plusのshow parameter同様に、v$parameterではCDB,PDB毎のパラメータのみ参照できるようですね。ふむふむ。

SYS@orcl12c> select name,value from v$parameter where name='open_cursors';

NAME VALUE
------------------------------ ------------------------------
open_cursors 400

SYS@orcl12c> conn sys@pdborcl as sysdba
パスワードを入力してください:
接続されました。
SYS@pdborcl> /

NAME VALUE
------------------------------ ------------------------------
open_cursors 200

SYS@pdborcl> conn sys@pdbdiscus as sysdba
パスワードを入力してください:
接続されました。
SYS@pdbdiscus> /

NAME VALUE
------------------------------ ------------------------------
open_cursors 500

ついでなので、もう少し検証してみましょう。

初期化パラメータを変更する際、scope=bothとしたのでSPFILEにも格納されているはずですよね。

マルチテナント化されてもSPFILEは一つ!  確認しておきましょう。

SYS@orcl12c> !find $ORACLE_BASE -name spfile*.ora
/opt/u01/product/12.1.0/dbhome_1/dbs/spfileorcl12c.ora

一つだけです!


中身がどうなっているか確認しておきましょう。

SYS@orcl12c> !strings $ORACLE_HOME/dbs/spfileorcl12c.ora
orcl12c.__data_transfer_cache_size=0
orcl12c.__db_cache_size=33554432
orcl12c.__java_pool_size=16777216
orcl12c.__large_pool_size=50331648
orcl12c.__oracle_base='/opt/u01'#ORACLE_BASE set from environment
orcl12c.__pga_aggregate_target=570425344
orcl12c.__sga_target=1090519040
orcl12c.__shared_io_pool_size=0
orcl12c.__shared_pool_size=213909504
orcl12c.__streams_pool_size=0
*.audit_file_dest='/opt/u01/admin/orcl12c/adump'
*.audit_trail='db'
*.compatible='12.1.0.0.0'
*.control_files='
/opt/u01/oradata/orcl12c/control01.ctl','/opt/u01/fast_recovery_area/orcl12c/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl12c'
*.db_recovery_file_dest='/opt/u01/fast_recovery_area'
*.db_recovery_file_dest_size=4800m
*.diagnostic_dest='/opt/u01'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl12cXDB)'
*.enable_pluggable_database=true
*.memory_max_target=0
*.memory_target=0
*.open_cursors=400
*.pga_aggregate_target=536870912
*.processes=300
*.remote_login_passwordfile='
EXCLUSIVE'
*.sga_max_size=536870912
*.undo_tablespace='UNDOTBS1'

あれれれれれれ〜〜、 なんで CDBのパラメータしかないんでしょう!!!!!!! 

scope=bothと指定してもエラーのでずに設定されてる。 

SPFILEのバイナリ部分だけに記録さされているのか?。イヤそんなことはないだろ!

scope=memoryと同じではないことを確認するために一旦、再起動!! 

SYS@orcl12c> alter pluggable database all close;

プラガブル・データベースが変更されました。

SYS@orcl12c> shutdown
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SYS@orcl12c>
SYS@orcl12c> startup
ORACLEインスタンスが起動しました。

Total System Global Area 534462464 bytes
Fixed Size 2290416 bytes
Variable Size 473959696 bytes
Database Buffers 50331648 bytes
Redo Buffers 7880704 bytes
データベースがマウントされました。
データベースがオープンされました。
SYS@orcl12c>
SYS@orcl12c> alter pluggable database all open;

プラガブル・データベースが変更されました。

SYS@orcl12c>
SYS@orcl12c> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 400
SYS@orcl12c>
SYS@orcl12c> conn sys@pdborcl as sysdba
パスワードを入力してください:
接続されました。
SYS@pdborcl> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 200
SYS@pdborcl>
SYS@pdborcl> conn sys@pdbdiscus as sysdba
パスワードを入力してください:
接続されました。
SYS@pdbdiscus> show parameter open_cursors

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 500


むむ!  むむむ!!!!!  SPFILEには格納されていない..ようなのに......

PDBの初期化パラメータは、何処にあるんだ〜〜〜〜!。 

次回へつづく!

次回、心の目を研ぎすませば、見えてくるものがある....みえないものもある...かもしれない

...乞うご期待w




PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #1

| | コメント (0) | トラックバック (0)

2013年8月18日 (日)

PDB毎に初期化パラメータを変更できるんですよ!(制限はあるけど) #1

11g R2と12c R1の初期化パラメータ(隠しパラメータを含む)の差分をチェックしようとして気づいたのですが....

いままでとちがうんですよ。 シングルインスタンスなのに、なぜ、同じパラメータが4つあるんだ?

SYS@orcl12c> l
1 select
2 count(ksppinm)
3 from
4 x$ksppi
5 where
6* ksppinm='open_cursors'
SYS@orcl12c> /

COUNT(KSPPINM)
--------------
4
SYS@orcl12c> l
1 select
2 count(distinct ksppinm)
3 from
4 x$ksppi
5 where
6* ksppinm='open_cursors'
SYS@orcl12c> /

COUNT(DISTINCTKSPPINM)
----------------------
1

実は、CDB (Container Database)が1つ、PDB SEED (Pluggable Database Seed)が1つ、PDB (Pluggable Database)が2つあるんです.....1インスタンスに

SYS@orcl12c> l
1 select
2 inst_id
3 ,cons.name
4 ,ksppinm
5 from
6 x$ksppi params
7 join v$containers cons
8 on
9 params.con_id = cons.con_id
10 where
11* ksppinm='open_cursors'
SYS@orcl12c> /

INST_ID NAME KSPPINM
---------- ------------------------------ ----------------------------------------
1 CDB$ROOT open_cursors
1 PDB$SEED open_cursors
1 PDBORCL open_cursors
1 PDBDISCUS open_cursors

初期化パラメータはCDBだけでなく、PDB毎に設定できるようになっているようです!


ただし、よくよく調べてみると、PDBで変更可能な初期化パラメータは制限されているんです。

今後のためにPDBで変更可能な初期化パラメータ一覧(隠しパラメータ含む)をHTML形式でスプールしておきました。
Oracle Database 12c r1 12.1.0.1.0 - Pluggable Database Modifiable Parameters (including hidden parameters)

何かのときに役にたつかも... :)

...え、どうやって隠しパラメータの分もリストしたのかって?、 PDBで変更できる初期化パラメータはv$parameterのISPDB_MODIFIABLE列を見ればわかるのですが、隠しパラメータの分まではでてないですものね〜、

v$parameterを心の目で見ればいいんですよ。(謎


次回は、PDBで設定できる初期化パラメータを変更していて気づいたことを書く予定 :)

| | コメント (0) | トラックバック (0)

2013年8月14日 (水)

DBCAでPluggable Databaseを追加作成してみた


Pluggable Database毎に、システム、AUX、一時、ユーザの表領域を持ち、制御ファイル、REDOログ、UNDOはContainer Database配下で共有管理されています。

/opt/u01 なのはこちらの都合なので気にしないようにw

$ ls -lR $ORACLE_BASE/oradata
/opt/u01/oradata:
合計 4
drwxr-x---. 5 oracle oinstall 4096 8月 9 00:22 2013 orcl12c

/opt/u01/oradata/orcl12c:
合計 2185944
-rw-r-----. 1 oracle oinstall 17973248 8月 9 00:46 2013 control01.ctl
drwxr-x---. 2 oracle oinstall 4096 8月 9 00:22 2013 pdbdiscus
drwxr-x---. 2 oracle oinstall 4096 6月 29 10:56 2013 pdborcl
drwxr-x---. 2 oracle oinstall 4096 6月 29 10:48 2013 pdbseed
-rw-r-----. 1 oracle oinstall 52429312 8月 9 00:46 2013 redo01.log
-rw-r-----. 1 oracle oinstall 52429312 8月 9 00:16 2013 redo02.log
-rw-r-----. 1 oracle oinstall 52429312 8月 9 00:16 2013 redo03.log
-rw-r-----. 1 oracle oinstall 859840512 8月 9 00:46 2013 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 828383232 8月 9 00:46 2013 system01.dbf
-rw-r-----. 1 oracle oinstall 92282880 8月 9 00:45 2013 temp01.dbf
-rw-r-----. 1 oracle oinstall 367009792 8月 9 00:46 2013 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 5251072 8月 9 00:46 2013 users01.dbf

/opt/u01/oradata/orcl12c/pdbdiscus:
合計 957528
-rw-r-----. 1 oracle oinstall 5251072 8月 9 00:45 2013 pdbdiscus_users01.dbf
-rw-r-----. 1 oracle oinstall 702554112 8月 9 00:45 2013 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 272637952 8月 9 00:45 2013 system01.dbf
-rw-r-----. 1 oracle oinstall 20979712 8月 9 00:22 2013 temp01.dbf

/opt/u01/oradata/orcl12c/pdborcl:
合計 7135544
-rw-r-----. 1 oracle oinstall 4618985472 8月 9 00:45 2013 SAMPLE_SCHEMA_users01.dbf
-rw-r-----. 1 oracle oinstall 375529472 8月 9 00:45 2013 example01.dbf
-rw-r-----. 1 oracle oinstall 1323311104 8月 3 14:48 2013 pdborcl_temp01.dbf
-rw-r-----. 1 oracle oinstall 734011392 8月 9 00:45 2013 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 293609472 8月 9 00:45 2013 system01.dbf

/opt/u01/oradata/orcl12c/pdbseed:
合計 948084
-rw-r-----. 1 oracle oinstall 91234304 6月 29 10:52 2013 pdbseed_temp01.dbf
-rw-r-----. 1 oracle oinstall 671096832 6月 29 10:55 2013 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 272637952 6月 29 10:55 2013 system01.dbf

参考:
orcl12c : CDB
pdbdiscus : PDB (DBCAで追加作成したPDB)
pdborcl : PDB
pdbseed : PDB Seed

次はなにを調べましょうか ...そうだあれにしよう...

| | コメント (0) | トラックバック (0)