Oracle RAC環境ではASM上にデータファイルを作成するのが普通だが
ふと、OS上に表領域を作成できるのか気になり試してみた。

環境

oracle RAC 12c ( 2node RAC )

1. 表領域の作成

ノード1にて表領域をOS上に作成する。

ノード1

oracle$ sqlplus / as sysdba
SQL> connect / as sysdba

SQL> create tablespace test_tblsp datafile '/tmp/test_tblsp.dbf' size 1m;

表領域が作成されました。

この状態でノード1、ノード2それぞれのアラートログを見てみる。

アラートログ:ノード1

Wed May 09 19:24:57 2018
create tablespace test_tblsp datafile '/tmp/test_tblsp.dbf' size 1m
Completed: create tablespace test_tblsp datafile '/tmp/test_tblsp.dbf' size 1m

アラートログ:ノード2

Wed May 09 19:25:01 2018
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl_2/trace/orcl_2_dbw0_26821.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/tmp/test_tblsp.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

表領域を作成したノード1では実際にデータファイルが作成されエラーは出ず。
一方、ノード2ではファイルが作成されずエラーが出る。大方の予想どおり。

2. 表の作成

せっかくなので表を作成してみる。

ノード1

SQL> create table test1 ( id varchar2(30) primary key, address varchar2(80) ) tablespace test_tblsp;

表が作成されました。

SQL> desc test1
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 ID    NOT NULL VARCHAR2(30)
 ADDRESS     VARCHAR2(80)

SQL>

作成されるし、表定義も確認できる。

一方、ノード2で確認しようとすると。。。

ノード2

SQL> desc test1
ERROR:
ORA-01157: データファイル7を識別/ロックできません -
DBWRトレース・ファイルを参照してください ORA-01110:
データファイル7: '/tmp/test_tblsp.dbf'

エラーで見られない。

3. レコードを挿入

せっかくなのでレコードを入れてみる。

ノード1

SQL> insert into test1 values ( 'hoge1', 'Foobar Street' );

1行が作成されました。


SQL> commit;

コミットが完了しました。

SQL> alter system checkpoint;

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


SQL>
SQL> select * from test1;

ID
--------------------------------------------------------------------------------
ADDRESS
--------------------------------------------------------------------------------
hoge1
Foobar Street


SQL>

レコードも見られる。

一方、ノード2はというと。。。

ノード2

SQL> select * from test1;
select * from test1
              *
行1でエラーが発生しました。:
ORA-01157: データファイル7を識別/ロックできません -
DBWRトレース・ファイルを参照してください ORA-01110:
データファイル7: '/tmp/test_tblsp.dbf'

SQL>

やっぱりダメみたい。

まとめ

表領域を作成したノード上にはファイルが作成され、表の作成、レコードの挿入もできるが その他のノードではファイルが作成されないため当該の表領域への操作はエラーとなる模様。