Personal Computer - Oracle - データベース作成

ご意見・ご感想は、nao_k@din.or.jpへお願いします。

Oracleのデータベース作成ですが、Windows版だろうとLinux版だろうと全くと言っていいほど同じなので Linux版をベースにします。 前回、RedHat Linux 6.2J にインストールしたOracle8iEE R8.1.5 を使います。

データベース作成対象
OS Official RedHat Linux 6.2 日本語版 (FTP版)
Hostname sky.yggdrasill
Oracle Oracle8i Enterprise Edition R8.1.5(OTN版)
CPU Intel PentiumII 300MHz
MEMORY 192MB(EDO 32MBx6)
SCSI HDD IBM DCAS-34330 (4GB)
$ORACLE_USERora8i
$ORACLE_HOME/home/ora8i/app

最初に決めるべき事

まずは、データベースの基本的な設定を決めます。
ORACLE_SID は、初期化ファイル名等にも使われますので、一番最初に決めなければいけません。
あまり適当でもいけないんですが、実験用でもありますので、初期DBにも使われる orcl にする事にします。

パラメーター名指定場所メモ
ORACLE_SID 環境変数 orcl 定番です(^_^;)

初期化ファイル名 は、initSID.ora となりますので、今回は、initorcl.ora になります。
ファイルが無ければ、元になる $ORACLE_HOME/dbs/init.ora をコピーしましょう。

作業するユーザーは、インストール時に利用したユーザー ora8i を利用します。


Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i686
login: ora8i
Password:
Last login: Sat Jul 22 03:01:56 from blue

[ora8i@sky ora8i]$ cp app/dbs/init.ora admin/orcl/pfile/initorcl.ora

そして、あとあと変更できない部分(DBの再作成でのみ対応可能)、または非常に面倒な部分を決めます。これらの値は、 初期化ファイル(pfile) に記入して指定するものと、create database 文で指定するものがあります。
中でも、character set や、db_block_size は、今後の事をよく考えて決めましょう。
character set によっては、同じ文字でも使用バイト数が違う文字も存在します。半角カナがそうです。EUC 系は、 2バイトに対し、SJIS 系は、1バイトですので、実データの格納文字数に響きます。
クライアントが、Windows系 のみならば、SJIS系 が良いかもしれません。

national character set は、character set と同じにするか、それの FIXED版 にしましょう。

db_block_size は、バッファ関係の実サイズや、DISK I/O等の基準になります。

それらを含め、いろいろ参考になる資料として、マニュアルがあります。

Oracle8 Server 管理者ガイド、リリース8.0
 Oracleデータベースの作成 2-1
  データベースを作成する前の考慮点 2-2
   Oracleデータベースの作成

パラメーター名指定場所メモ
db_name pfile orcl ORACLE_SID に合わせて決めました
character set create databaseJA16EUC JA16SJIS でも可
national character set create databaseJA16EUCFIXED JA16SJISFIXED でも可
db_block_size pfile 2048 2KB 初期値です(^_^;)

あと、残りパラメーターを決めます。

これらも、初期化ファイル(pfile) に記入していくわけですが、サンプルとなるファイルが、$ORACLE_HOME/dbs/ に、 init.ora というファイル名であります。
それをコピーして利用するか、事前に、dbassist で雛形を作ってそれを利用する事ができます。もちろん一から書いても問題ありません。 でも、楽ができるところは 楽をしたいので、今回は、dbassist で作った物をベースにしていきます。

初期化ファイル(pfile) に記入されてないパラメーターに関しては、すべてデフォルト値が採用されます。
Oracle8 までならば、比較的小さめだったんですが、Oracle8i では、結構大きく取られてるデフォルトもあります。
パワー不足なPCへインストールする場合は、そこを気をつけないと、データベース作成に異様に時間がかかってしまいます。最悪だと、 作成すらできないかもしれません。ですので、 気になる方は、java_pool_size だけでも、設定しましょう。
java_pool_size の初期値は、なんと、20000K(20MB) です(^_^;)
JServer をインストールもしてないし、R8.1.5 では、まだ正式サポートでもありません。
R8.1.6 以降で、なおかつ、Java を利用する場合のみ必要となります。かといっても、0Byte だと不都合があり、 ORA-01078: システム・パラメータの処理が失敗しました。 というエラーが発生し、起動できません。
よって、1024K(1MB) 程度でお茶を濁しておきましょう。

あとは下記のように適当に決めました。最初から大きく取っててもいいですし、作成後じっくり調整しても良いと思います。

パラメーター名指定場所メモ
db_block_buffers pfile 8192 16MB = 8192 x db_block_size(2048)
shared_pool_size pfile 62914566MB
log_buffer pfile 163840 160KB
db_domain pfile yggdrasill ドメインも合わせました
compatible pfile 8.1.0 アップグレードでも無いので下位互換は考えてません(^_^;)
java_pool_size pfile 1024K メモリを効率的に使うためにも・・・・

ファイル/ディレクトリ構成も決めましょう
初期化ファイル

データベース起動時に読み込み、データベースの動作等を決定する各種パラメーターを格納するファイルです。

パラメーター名値/パス名+ファイル名
pfile(初期化ファイル)/home/ora8i/admin/orcl/pfile/initorcl.ora
制御ファイル(コントロールファイル)

データベースの内部制御的なデータなどが格納されているファイルです。
※このファイルがなくなると起動できなくなります。必ず2つ以上指定し、出来るだけ物理的に違うディスクに置くようにしましょう。
※もしすべての制御ファイルが完全に破壊されてしまった場合は、NOMOUNTモードで起動し、create controlfile で作成する事も可能ではあります。

パラメーター名値/パス名+ファイル名
control_files(制御ファイル) /home/ora8i/oradata/orcl/ctl1/control01.ctl
/home/ora8i/oradata/orcl/ctl2/control02.ctl
各種データファイル

日本オラクル株式会社のホームページにちょうど基本アーキテクチャの説明資料がありますのであわせてご覧ください。
PDF資料
http://www.oracle.co.jp/events/soho04/doc/architecture.pdf

Oracleのシステム的に必要なファイルは、SYSTEM領域REDOログ です。

SYSTEM領域 は、データベースのさまざまな情報が格納され、管理されています。これが壊れた場合は、 REDOログ 等で修復するか、バックアップから復元しなければ、起動できなくなります。

REDOログ は、データベースに対す変更等の情報全てが書き込まれ、障害時のデータ復旧に利用されます。
最低でも2つ(できれば3つ)以上のグループを作成し、順序良く利用します。
※障害時の為のファイルである為、REDOログ 自体が壊れた場合、修復する方法はありません。ログを切り捨てて、ファイルを再作成したりします。 その為、2つ以上のメンバーを作ることでミラー化することができます。同じディスクにミラー化してもディスク障害の場合は、全滅する事もありますので、 出来るだけ物理的に違うディスクに置くようにしましょう。
今回は、今回限りの実験用の為、別ディレクトリに置く程度にしておきます。

あとは、必要に応じて作成するデータファイルですが、作るときは必ずしも下記の通りに作らないといけないわけではありません。 管理しやすいように作りましょう。

ロールバックセグメント用領域 は、Oracleの読み取り一貫性 を実現し、ロールバック時にも利用されるロールバックセグメントを格納する領域です。 これがないと更新関係とかいろんな事ができなくなります。

一時セグメント用領域 は、データのソート時等にメモリを利用する代わりに一時的な作業域として利用されます。 これも運用時はあるべきものと思ったほうが良いでしょう。これがないと、SYSTEM領域 を利用しちゃいます。

データセグメント用領域 は、実際に業務データ等を格納する為に必要です。ここに、実際のデータを格納しましょう。 SYSTEM領域 を利用する事も出来る事は出来るのですが、SYSTEM領域 は、Oracleがデータベースとして稼働する為に重要な領域 なので、分けていた方が安全です。障害時に起動できなくなってしまうと、Oracleのリカバリ機能すら使えなくなってしまいます。

索引セグメント用領域 は、主にデータセグメント用領域 にあるデータの索引を格納する為に用意します。
実際は、データセグメント用領域 となんら変わりはありません。データセグメント用領域 に索引を置く事もできます。 でも、索引は、壊れても データセグメント用領域 から作りなおす事もできますし、分けて置くといろいろ利点があります。

パラメーター名値/パス名+ファイル名
SYSTEM(SYSTEM領域) /home/ora8i/oradata/orcl/system01.dbf
logfile(REDOログ) /home/ora8i/oradata/orcl/redo1/redo01.log
/home/ora8i/oradata/orcl/redo1/redo02.log
/home/ora8i/oradata/orcl/redo2/redo01.log
/home/ora8i/oradata/orcl/redo2/redo02.log
RBS(ロールバックセグメント用領域)/home/ora8i/oradata/orcl/rbs01.dbf
TEMP(一時セグメント用領域) /home/ora8i/oradata/orcl/temp01.dbf
USERS(データセグメント用領域) /home/ora8i/oradata/orcl/users01.dbf
INDX(索引セグメント用領域) /home/ora8i/oradata/orcl/indx01.dbf'
ダンプ関連

background_dump_dest は、バックグラウンド・プロセス(LGWR、DBWRなど)のトレース・ファイルが書き込まれるディレクトリのパス名を指定します。
alert_SID.log は、データベースの起動・停止や、各プロセスの動作情報、何かしらのエラー等が記述され、どんどん膨らんでいきますので、 内容的にも、容量的にも要注意です。

core_dump_dest は、コア・ダンプが書き込まれるディレクトリのパス名を指定します。
致命的な障害時などに掃き出されるコアダンプですので、これも要注意です。

user_dump_dest は、ユーザー・プロセスのトレース・ファイルが書き込まれるディレクトリのパス名を指定します。
ユーザ・プロセスで発生した warning や、SQL_TRACE などのトレースファイルが書き込まれます。

パラメーター名値/パス名
background_dump_dest /home/ora8i/admin/orcl/bdump
core_dump_dest /home/ora8i/admin/orcl/cdump
user_dump_dest /home/ora8i/admin/orcl/udump

各データファイルの成長度合(拡張度合)を決めましょう
作成するデータベース案(ファイル構成)

最低限必要な表領域と、状況に応じて必要な表領域を作成しますが、そのために、ファイル名、ファイルサイズと、 自動拡張(度合+最大サイズ)などを決めます。

ファイルの 自動拡張(AUTOEXTEND=ON) を行う場合、NEXT とかは、データ増量時のパフォーマンスに影響しますが、 MAXSIZE は必ず指定するようにしましょう。 MAXSIZE UNLIMITED にしてしまうと、いざ、肝心のディスク容量が不足してしまった場合等、問題が発生する可能性がある為、 できる限り、データ見積もりをし、多少の余裕を持って上限を設けたほうが良いようです。

データを格納する表領域は、PERMANENT となり、データは格納されず、作業領域として利用される表領域・一時セグメントだけは、TEMPORARY と指定します。

表領域名DATAFILESIZEAUTOEXTENDNEXTMAXSIZE領域の種類
systemsystem01.dbf200MOFF- - PERMANENT
RBS rbs01.dbf 20MON 10M200MPERMANENT
TEMP temp01.dbf' 10MON 10M200MTEMPORARY
USERS users01.dbf 10MON 10M200MPERMANENT
INDX indx01.dbf 10MON 10M100MPERMANENT
各データファイル内のテーブルのデフォルトとなる成長度合(拡張度合)を決めましょう
作成するデータベース案(ファイル構成)

今度は、表領域内に作るテーブルの成長(拡張)度合のデフォルト値を決めます。しかし、各テーブルで指定する場合、ここでは深く考えなくても良いです。

ここから、EXTENTS や、PCTINCREASE があり、慣れないとややこしい要素です。
大抵問題は起こらないはずなので、PCTINCREASE = 0 としておくと、素直に拡張されますので、理解しやすくなるかと思います。

表領域名MINIMUM EXTENTDEFAULT STORAGE
INITIALNEXTMINEXTENTSMAXEXTENTSPCTINCREASE
SYSTEM  128K128K1121 0
RBS 1M 1M 1M2UNLIMITED0
TEMP 1M 1M 1M1UNLIMITED0
USERS 1M 1M 1M1UNLIMITED0
INDX 1M 1M 1M1UNLIMITED0

データベース作成前の確認事項
作成する前に、確認すべきこと
・初期化パラメータ・ファイルの rollback_segments が無効(コメント)になっている事
・ディスクの空き容量がデータファイル作成できるだけ十分にある事
・2度目以降(再作成)ならば、余分なファイルは事前に削除しておく事(REUSE指定されていれば再使用可)
remote_login_passwordfile = exclusive を指定しているため、パスワードファイル orapwSID が ・$ORACLE_HOME/dbs/ に存在するか確認、もしくは、remote_login_passwordfile を無効にする


[ora8i@sky dbs]$ pwd
/home/ora8i/app/dbs
[ora8i@sky dbs]$ ls -l orapworcl
-rwSr-----    1 ora8i    oinstall     1536 Jul  9 19:20 orapworcl

存在しない場合、create database 時に、
ORA-01990: error opening password file '$ORACLE_HOME/dbs/orapw'
等のエラーが発生します。そういう場合は、作成しましょう。


[ora8i@sky dbs]$ orapwd
Usage: orapwd file= password= entries=

  where
    file - name of password file (mand),
    password - password for SYS and INTERNAL (mand),
    entries - maximum number of distinct DBA and OPERs (opt),
  There are no spaces around the equal-to (=) character.

[ora8i@sky dbs]$ orapwd file=orapworcl password=xxxxx entries=2

・利用予定のディレクトリが存在しているかどうか。無ければ作成しましょう。


[ora8i@sky ora8i]$ mkdir admin
[ora8i@sky ora8i]$ mkdir admin/orcl
[ora8i@sky ora8i]$ mkdir admin/orcl/arch
[ora8i@sky ora8i]$ mkdir admin/orcl/bdump
[ora8i@sky ora8i]$ mkdir admin/orcl/cdump
[ora8i@sky ora8i]$ mkdir admin/orcl/udump
[ora8i@sky ora8i]$ mkdir admin/orcl/pfile
[ora8i@sky ora8i]$ mkdir oradata/orcl
[ora8i@sky ora8i]$ mkdir oradata/orcl/ctl1
[ora8i@sky ora8i]$ mkdir oradata/orcl/ctl2
[ora8i@sky ora8i]$ mkdir oradata/orcl/redo1
[ora8i@sky ora8i]$ mkdir oradata/orcl/redo2

データベース作成
では、作成する為に、事前に作成しているユーザーでログオンします。

初期化ファイルに問題のない事を確認の上、いざ、作業にはいります。


Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i686
login: ora8i
Password:
Last login: Fri Jul  7 02:25:48 from blue

[ora8i@sky ora8i]$ vi /home/ora8i/admin/orcl/pfile/initorcl.ora

svrmgrl を起動し、ログを残すため、スプールの設定をします。

internal権限 でコネクトします。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> spool /home/ora8i/app/install/crdborcl.log
SVRMGR> connect internal
接続されました。

インスタンス のみ起動し、データベース作成ができる状態に移行します。
その際、初期化ファイルを指定してあげなくてはいけません。

起動している状態には、通常3パターンあり、
nomount = プロセスのみ起動、データベースファイル関係は、マウントせず。
mount = プロセスが起動し、データベースはOPENしていないが、ある程度の操作は可能。
open = プロセスからデータベースまですべて利用可能。
データベース自体まだ作成していないので、nomount までしかできません。


SVRMGR> startup nomount pfile = /home/ora8i/admin/orcl/pfile/initorcl.ora
Oracleインスタンスが起動しました。
全システム・グローバル領域                        25759120バイト
Fixed Size                                          64912バイト
Variable Size                                     8744960バイト
Database Buffers                                 16777216バイト
Redo Buffers                                       172032バイト

初期化ファイル に問題がなければ、インスタンスが起動します。

※Linux版Oracle8iにて日本語表示時に、使用バイト数がすべて32バイトになる問題があり、それは OTN版ならば、 8.1.5.0.2 にする為のパッチをあて、製品版ならば、同梱CDにパッチがあるので、それを利用すれば解決します。

では、データベースを作成します。


SVRMGR> create database "orcl"
     2>   controlfile reuse
     3>   maxdatafiles 254
     4>   maxinstances   8
     5>   maxlogfiles   32
     6>   maxlogmembers  5
     7>   noarchivelog
     8>   character set JA16EUC
     9>   national character set JA16DBCSFIXED
    10>   datafile '/home/ora8i/oradata/orcl/system01.dbf' size 200m reuse
    11>     autoextend off
    12>   logfile group 1 ('/home/ora8i/oradata/orcl/redo1/redo01.log',
    13>                    '/home/ora8i/oradata/orcl/redo2/redo01.log') size 1m reuse,
    14>           group 2 ('/home/ora8i/oradata/orcl/redo1/redo02.log',
    15>                    '/home/ora8i/oradata/orcl/redo2/redo02.log') size 1m reuse;
文が処理されました。

すでに、決めた内容を利用して、create database を実行します。

maxdatafilesmaxinstancesmaxlogfiles に関しては、雛形になったものからなにも変更していません。
maxlogmembersもとりあえずは適当に決めました。が、maxdatafiles 等は、データベース作成後に変更するには、 制御ファイルの再作成&データベース再起動が必要になる為、余裕を持って値を決めたほうが良いようです。詳細は、マニュアルで確認しましょう。

また、logfile は、一応、ミラーしたほうがサンプルとしてはいいだろうという事でメンバーを増やしました。

他のデータファイルと違って、system領域 のみはここで作成します。
しかし、datafile に指定できるパラメータ全てが、指定できるわけではありません。
minimum extentdefault storage 等は、別途指定します。

ここで指定している datafile は、system領域 で、サイズ次第で結構処理に時間がかかります。

minimum extent は、system領域にも設定したほうが良いのかよく理解していないため、今回とりあえず、指定してみますが、デフォルトでは設定されてないようです。


SVRMGR> alter tablespace system
     2>   minimum extent 128k;
文が処理されました。
SVRMGR> alter tablespace system
     2>   default storage (initial 128k next 128k
     3>                    minextents 1 maxextents 121 pctincrease 0);
文が処理されました。

作成後、$ORACLE_HOME/dbs/ に、lkORCL が作成されます。


[ora8i@sky ora8i]$ ls /home/ora8i/app/dbs/
init.ora  initdw.ora  initorcl.ora  lkORCL  orapworcl

もし作成に失敗した場合、そのまま、create database を流しなおすと、
ORA-01501: CREATE DATABASE?????????????
ORA-01991: ??????????: /home/ora8i/app/dbs/orapworcl??????
というエラーになる事があります。その場合は、パスワードファイルを再作成しましょう。


SVRMGR> SVRMGR> shutdown
ORA-01109: ???????????????????
データベースがディスマウントされました。
Oracleインスタンスが停止しました。
SVRMGR> exit
Sever Managerを終了しました。
[ora8i@sky dbs]$ rm $ORACLE_HOME/dbs/orapworcl
[ora8i@sky dbs]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=silent entries=2

次は、スクリプト catalog.sql を流します。
catalog.sql は、system領域 に、データ・ディクショナリー・ビュー とその シノニム を作成します。

このスクリプトも、今後のスクリプトも、再作成を考慮している為か drop してから、create する為、最初はすべての drop でエラーがでますが、それらに限り、気にする必要はありません。

しかし、慣れるまでは、また、なにかしらの問題が起こった場合は、残ったログを見て、検索するなりしてエラー内容を確認しましょう。


SVRMGR> @/home/ora8i/app/rdbms/admin/catalog.sql;
文が処理されました。
〜略〜
文が処理されました。
文が処理されました。
文が処理されました。
drop public synonym v$buffer_pool
                    *
ORA-01432: ??????????????????????
文が処理されました。
文が処理されました。
文が処理されました。
drop public synonym v$targetrba
                    *
ORA-01432: ??????????????????????
〜略〜
文が処理されました。
文が処理されました。
drop role recovery_catalog_owner
          *
ORA-01919: ???: RECOVERY_CATALOG_OWNER????????
文が処理されました。
文が処理されました。
文が処理されました。

データベースの基本的な部分は準備できました。
次は、各データファイル・表領域を作成します。

まずは、ロールバックセグメント用表領域 を作成します。

この領域の容量不足は、大量のトランザクションに影響を及ぼします。見積もった上で多少余裕を持って作成しましょう。
性質上、何度も拡張され、縮小する為、エクステントの指定次第でパフォーマンスに悪影響がでる可能性もあります。

create tablespace で失敗した場合や、再作したい態場合は、作成後なら、drop tablespace し、 その後、reuse 指定で作成すれば、ファイルを上書きし作成できます。

今回は、rbs として付けてますが、判断しやすければどんな名前でも問題ありません。


SVRMGR> create tablespace rbs
     2>   datafile '/home/ora8i/oradata/orcl/rbs01.dbf' size 20m reuse
     3>   autoextend on
     4>   next 10m maxsize 200m
     5>   minimum extent 1m
     6>   default storage (initial 1m next 1m
     7>                    minextents 2 maxextents unlimited pctincrease 0);
文が処理されました。

ロールバックセグメント用表領域 内に、ロールバックセグメント を作成します。

作成する数は、同時に起こるトランザクション数 ÷ 4 程度にしておきます。
一つのロールバックセグメントで、ほぼ4つのトランザクションに対応できる勘定です。
※もちろん、トランザクション内容によってはその限りではありません。

それと、よくある大量更新タイプのバッチ処理にも対応できるほど大きなものも用意しておいたほうが良い事があります。
よくある定番の名前で monster としておきます。

作成後、まだ利用可能ではありませんので、online にして、利用できるようにします。
monster に関しては、いざという時のみ利用したい場合は、その時にのみ、online にするという方法もあります。

マニュアル - Oracle8 Server 管理者ガイド、リリース8.0 - ロールバック・セグメントの管理 18-1


SVRMGR> create rollback segment monster
     2>   tablespace rbs
     3>   storage (initial 10m next 10m
     4>            minextents   2 maxextents unlimited
     5>            optimal 20m);
文が処理されました。
SVRMGR> create rollback segment r01
     2>   tablespace rbs
     3>   storage (initial 1m next 1m
     4>            minextents   2 maxextents unlimited
     5>            optimal 2m);
文が処理されました。
SVRMGR> create rollback segment r02
     2>   tablespace rbs
     3>   storage (initial 1m next 1m
     4>            minextents   2 maxextents unlimited
     5>            optimal 2m);
文が処理されました。
SVRMGR> create rollback segment r03
     2>   tablespace rbs
     3>   storage (initial 1m next 1m
     4>            minextents   2 maxextents unlimited
     5>            optimal 2m);
文が処理されました。
SVRMGR> create rollback segment r04
     2>   tablespace rbs
     3>   storage (initial 1m next 1m
     4>            minextents   2 maxextents unlimited
     5>            optimal 2m);
文が処理されました。
SVRMGR> alter rollback segment monster online;
文が処理されました。
SVRMGR> alter rollback segment r01 online;
文が処理されました。
SVRMGR> alter rollback segment r02 online;
文が処理されました。
SVRMGR> alter rollback segment r03 online;
文が処理されました。
SVRMGR> alter rollback segment r04 online;
文が処理されました。

一時セグメント用領域 を作成します。

この領域は、メモリ上でソートできない量になると使われたり、一時表(Oracle8i以降) 用の領域として使われたりします。
性質上、何度も拡張され、縮小する為、エクステントの指定次第でパフォーマンスに悪影響がでる可能性もあります。

initial = next = SORT_AREA_SIZE * n + db_block_size
pctincerase = 0
が良いと言われています。が、今回は実験ですので適当に決めています。

今回は、temp として付けてますが、判断しやすければどんな名前でも問題ありません。


SVRMGR> create tablespace temp
     2>   datafile '/home/ora8i/oradata/orcl/temp01.dbf' size 10m reuse
     3>   autoextend on
     4>   next 10m maxsize 200m
     5>   minimum extent 1m
     6>   default storage (initial 1m next 1m
     7>                    minextents 1 maxextents unlimited pctincrease 0)
     8>   online
     9>   temporary;
文が処理されました。

データセグメント用領域 を作成します。

ユーザーテーブルを格納する事を目的とします。
データセグメント用領域 を作成せず、テーブルを SYSTEM領域 に作成する事も可能です。
が、データセグメントに関るトラブル発生時に、SYSTEM領域 への影響があると、データベースをオープンする事すらできなくなる可能性があります。 その場合、致命的に障害にまで発展する事もあるので、基本的には SYSTEM領域 とは分けて作成します。

不足したり、別ユーザーを分けて管理したい場合とかは、表領域名を変えて作成できます。
今回は、users として付けてますが、判断しやすければどんな名前でも問題ありません。


SVRMGR> create tablespace users
     2>   datafile '/home/ora8i/oradata/orcl/users01.dbf' size 10m reuse
     3>   autoextend on
     4>   next 10m maxsize 200m
     5>   minimum extent 1m
     6>   default storage (initial 1m next 1m
     7>                    minextents 1 maxextents unlimited pctincrease 0)
     8>   online;
文が処理されました。

索引セグメント用領域 を作成します。

索引セグメント用領域 を作成せず、索引(インデックス)データセグメント用領域 に作成する事も可能です。
が、同じ表領域に配置すると、表領域内の断片化をますます促進してしまいますし、物理ディスクを分けてパフォーマンスアップしたい場合 を考えると、別表領域にし、別の物理ディスクへ配置する方が良いでしょう。

データアクセスを高速化してくれるインデックスなのに、データアクセスの足を引っ張るような配置は駄目って事ですね。


SVRMGR> create tablespace indx
     2>   datafile '/home/ora8i/oradata/orcl/indx01.dbf' size 10m reuse
     3>   autoextend on
     4>   next 10m maxsize 100m
     5>   minimum extent 1m
     6>   default storage (initial 1m next 1m
     7>                    minextents 1 maxextents unlimited pctincrease 0)
     8>   online;
文が処理されました。

既存ユーザーのデフォルト一時セグメント用領域の設定

データベース作成と同時に作成されるユーザーが、sys と、system です。

internal は、正確には、sys の別名で、データベースの起動・終了等を処理できるようになっています。

ここで各ユーザーのデフォルトとなる 一時セグメント用領域 を指定しておかないと、いざ必要になったときに、SYSTEM領域 を利用されてしまいます。
最悪、SYSTEM領域 が溢れて障害に発展する可能性もあるので、各ユーザーにはかならず 一時セグメント用領域 を指定するようにしましょう。
もちろん、今後もユーザー作成する度に、指定してあげましょう。

パスワード もデフォルトのままだとセキュリティ的にまずいので、変更するべきなんですが、それは途中のスクリプト内にて、デフォルトのパスワードを指定 しているものもあるので、データベース作成がすべて終わってから変更します。


SVRMGR> alter user sys temporary tablespace temp;
文が処理されました。
SVRMGR> alter user system temporary tablespace temp;
文が処理されました。

次は、スクリプト catproc.sql を流します。
catproc.sql は、いろいろ便利なパッケージを作成(コンパイル)してくれます。
dbms_sql とか、utl_file とかですね。

このスクリプトも、また、これ以降のコンパイルに結構時間がかかるものがいくつかあります。


SVRMGR> @/home/ora8i/app/rdbms/admin/catproc.sql;
文が処理されました。
〜略〜
文が処理されました。
0 行処理されました。
1行処理されました。
文が処理されました。
文が処理されました。
DROP PUBLIC SYNONYM dbmszexp_syspkggrnt
                    *
ORA-01432: ??????????????????????
文が処理されました。
文が処理されました。
〜略〜
文が処理されました。
文が処理されました。
文が処理されました。
文が処理されました。
文が処理されました。

次は、スクリプト caths.sql を流します。
caths.sql は、Heterogeneous Services data dictionary objects を作成するようです。


SVRMGR> @/home/ora8i/app/rdbms/admin/caths.sql;
文が処理されました。
〜略〜
drop public synonym hs_all_inits
                    *
ORA-01432: ??????????????????????
文が処理されました。
文が処理されました。
文が処理されました。
drop public synonym dbms_hs
                    *
ORA-01432: ??????????????????????
文が処理されました。
文が処理されました。
文が処理されました。
〜略〜
文が処理されました。
文が処理されました。
文が処理されました。

次は、スクリプト otrcsvr.sql を流します。

が、なにも中身がないのでパス(^_^;)


SVRMGR> @/home/ora8i/app/rdbms/admin/otrcsvr.sql;
SVRMGR>

[ora8i@sky orcl]$ cat /home/ora8i/app/rdbms/admin/otrcsvr.sql
[ora8i@sky orcl]$

次は、スクリプト pupbld.sql を流します。

pupbld.sql は、ユーザー system で流すべきスクリプトなので、接続しなおします。

sqlplus 等での接続時にでる警告は、このスクリプトを流していない為という事が多いです。


SVRMGR> connect system/manager
接続されました。
SVRMGR> @/home/ora8i/app/sqlplus/admin/pupbld.sql;
drop synonym product_user_profile
             *
ORA-01434: :o=|$9$k%W%i%$%Y!<%H!&%7%N%K%`$,B8:_$7$^$;$s!#
〜略〜
drop synonym product_user_profile
             *
ORA-01434: :o=|$9$k%W%i%$%Y!<%H!&%7%N%K%`$,B8:_$7$^$;$s!#
文が処理されました。
drop public synonym product_user_profile
                    *
ORA-01432: :o=|$9$k%Q%V%j%C%/!&%7%N%K%`$,B8:_$7$^$;$s!#
文が処理されました。

次は、スクリプト ordinst.sql を流します。

ordinst.sql は、ユーザー sys で流すべきスクリプトなので、接続しなおします。

スクリプトの最後に、exit が入ってるらしく、svrmgrl が終了されてしまった・・


SVRMGR> connect internal
接続されました。
SVRMGR> @/home/ora8i/app/ord/admin/ordinst.sql;
文が処理されました。
文が処理されました。
文が処理されました。
文が処理されました。
文が処理されました。
〜略〜
PACKAGE ORDSYS.PVTCARTRIDGEについてエラーはありませんでした。
文が処理されました。
PACKAGE BODY ORDSYS.PVTCARTRIDGEについてエラーはありませんでした。
文が処理されました。
PACKAGE CARTRIDGEについてエラーはありませんでした。
文が処理されました。
PACKAGE BODY CARTRIDGEについてエラーはありませんでした。
文が処理されました。
Sever Managerを終了しました。

svrmgrl を起動しなおして・・・・
次は、スクリプト mdinst.sql を流します。

svrmgrl をあらためて起動してるため、spool もやりなおしです。

更に新しいユーザー mdsys が作られていて、そのスキーマにいろいろ作られるようです。

また svrmgrl が終了されてしまった・・


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> spool /home/ora8i/app/install/mdinst.log;
SVRMGR> connect internal/
接続されました。
SVRMGR> @/home/ora8i/app/md/admin/mdinst.sql;
接続されました。
文が処理されました。
文が処理されました。
PACKAGE BODY MDBOOTSTRAPについてエラーはありませんでした。
Server Output                   ON
文が処理されました。
***********************************
*          BUILDING MD3           *
***********************************
Table MD$TAB created ...
Table MD$PTS created ...
Table MD$PTAB created ...
Table MD$COL created ...
Table MD$DIM created ...
〜略〜
Echo                            ON
SVRMGR> REM --------------------------------------------------------------------
-
SVRMGR> REM The Spatial Cartridge Installation Check is complete
SVRMGR> REM A copy of this session may be found in mdchk.log
SVRMGR> REM --------------------------------------------------------------------
-
SVRMGR> set echo off
Echo                            OFF
Sever Managerを終了しました。

svrmgrl を起動しなおして・・・・
次は、スクリプト spoolrep.sql を流します。

spoolrep.sql は、レプリケーション関係のスクリプトのようです。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> spool /home/ora8i/app/install/spoolrep.log;
SVRMGR> connect internal/
接続されました。
SVRMGR> @/home/ora8i/app/rdbms/admin/catrep.sql;
接続されました。
〜略〜
文が処理されました。
文が処理されました。
文が処理されました。
drop public synonym USER_REPGENOBJECTS
                    *
ORA-01432: 削除するパブリック・シノニムが存在しません。
文が処理されました。
文が処理されました。
〜略〜
文が処理されました。
0 行処理されました。
1行処理されました。
文が処理されました。

次は、スクリプト helptbl.sql を流します。

helptbl.sql は、ユーザー system で流すべきスクリプトなので、接続しなおします。

SQL*Plus HELP table を作成します。

処理が終わると、svrmgrl は突然終了させられます。


SVRMGR> connect system/manager
接続されました。
SVRMGR> @/home/ora8i/app/sqlplus/admin/help/helptbl.sql;

次は、SQL*Plus HELP table に、sql loader でデータを書き込んでいきます。


[ora8i@sky ora8i]$ sqlldr userid=system/manager control=app/sqlplus/admin/help/plushelp.ctl

SQL*Loader: Release 8.1.5.0.0 - Production on 日 Jul 9 20:09:24 2000

(c) Copyright 1999 Oracle Corporation.  All rights reserved.

コミット・ポイントに達しました。 - 論理レコード件数:84
コミット・ポイントに達しました。 - 論理レコード件数:168
コミット・ポイントに達しました。 - 論理レコード件数:252
コミット・ポイントに達しました。 - 論理レコード件数:336
コミット・ポイントに達しました。 - 論理レコード件数:420
コミット・ポイントに達しました。 - 論理レコード件数:504
コミット・ポイントに達しました。 - 論理レコード件数:588
コミット・ポイントに達しました。 - 論理レコード件数:672
コミット・ポイントに達しました。 - 論理レコード件数:756
コミット・ポイントに達しました。 - 論理レコード件数:840
コミット・ポイントに達しました。 - 論理レコード件数:886

次は、スクリプト helpindx.sql を流します。

SQL Loader でデータを書き込み後、インデックス等を作成します。

処理が終わると、svrmgrl は突然終了させられます。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> connect system/manager
接続されました。
SVRMGR> @/home/ora8i/app/sqlplus/admin/help/helpindx.sql;

次は、スクリプト tsinst.sql を流します。

更に新しいユーザー ordsys が作られていて、そのスキーマに Oracle8i Time Series 関連のものがいろいろ作られるようです。

処理が終われば、exit で、svrmgrl を終了します。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> spool /home/ora8i/app/install/tsinst.log;
SVRMGR> connect internal
接続されました。
SVRMGR> @/home/ora8i/app/ord/ts/admin/tsinst.sql;
接続されました。
文が処理されました。
〜略〜
PACKAGE ORDSYS.ORDTSCALEについてエラーはありませんでした。
文が処理されました。
PACKAGE ORDSYS.TIMESCALEについてエラーはありませんでした。
文が処理されました。
PACKAGE ORDSYS.ORDTTRANSについてエラーはありませんでした。
文が処理されました。
PACKAGE ORDSYS.ORDTCUMEについてエラーはありませんでした。
文が処理されました。
PACKAGE ORDSYS.ORDTMOVEについてエラーはありませんでした。
文が処理されました。
PACKAGE ORDSYS.ORDTMATHについてエラーはありませんでした。
文が処理されました。
〜略〜
Echo                            ON
SVRMGR> REM --------------------------------------------------------------------
-
SVRMGR> REM The Time Series Installation Check is complete
SVRMGR> REM --------------------------------------------------------------------
-
SVRMGR> set echo off
Echo                            OFF

SVRMGR> exit
Sever Managerを終了しました。

スクリプトもすべて終了しました。

次は、データベース起動時に自動的に、ロールバックセグメントがオンラインになるようにします。
データベース作成時に、コメントになっている事を確認した rollback_segments のパラメータを変更します。
ここに、作成したロールバックセグメントで、自動的にオンラインにしたいものだけ記入します。


[ora8i@sky ora8i]$ vi /home/ora8i/admin/orcl/pfile/initorcl.ora

rollback_segments = (monster, r01, r02, r03, r04)


これでいつでも好きなときに、shutdownstartup できるところまで作成できました。

では、ためしにやってみましょう。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> connect internal
接続されました。
SVRMGR> shutdown
データベースがクローズされました。
データベースがディスマウントされました。
Oracleインスタンスが停止しました。
SVRMGR> startup
LRM-00109: パラメータ・ファイル: /home/ora8i/app/dbs/initorcl.oraがオープンでき
ません。
ORA-01078: システム・パラメータの処理が失敗しました。
SVRMGR> startup pfile=/home/ora8i/admin/orcl/pfile/initorcl.ora
Oracleインスタンスが起動しました。
全システム・グローバル領域                        25759120バイト
Fixed Size                                          64912バイト
Variable Size                                     8744960バイト
Database Buffers                                 16777216バイト
Redo Buffers                                       172032バイト
データベースがマウントされました。
データベースがオープンされました。

startup だけでは起動できません。
エラー内容から察すると、初期化ファイル を指定しなかった場合、デフォルトで、$ORACLE_HOME/dbs/ に探しに行くようです。
それならば、リンク をそこに作りましょう。startup だけで起動する方が楽ですし(^_^;)


SVRMGR> shutdown
データベースがクローズされました。
データベースがディスマウントされました。
Oracleインスタンスが停止しました。
SVRMGR> exit
Sever Managerを終了しました。
[ora8i@sky ora8i]$ ln -s /home/ora8i/admin/orcl/pfile/initorcl.ora /home/ora8i/app/dbs/
[ora8i@sky ora8i]$ ls -al /home/ora8i/app/dbs/initorcl.ora
lrwxrwxrwx    1 ora8i    oinstall       41 Jul  1 22:10 /home/ora8i/app/dbs/initorcl.ora
 -> /home/ora8i/admin/orcl/pfile/initorcl.ora

これで起動するはずです。また試してみましょう。


[ora8i@sky ora8i]$ svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> connect internal
接続されました。
SVRMGR> startup
Oracleインスタンスが起動しました。
全システム・グローバル領域                        25759120バイト
Fixed Size                                          64912バイト
Variable Size                                     8744960バイト
Database Buffers                                 16777216バイト
Redo Buffers                                       172032バイト
データベースがマウントされました。
データベースがオープンされました。

無事、起動までできました。

簡単なSQLを発行したりしてみます。


SVRMGR> select table_name from tabs;
TABLE_NAME
------------------------------
ACCESS$
AQ$_MESSAGE_TYPES
AQ$_PENDING_MESSAGES
AQ$_PROPAGATION_STATUS
AQ$_QUEUE_STATISTICS
〜略〜
USER_HISTORY$
USTATS$
VIEW$
VIEWTRCOL$
_default_auditing_options_
180 行選択されました。
SVRMGR> exit
Sever Managerを終了しました。

これでデータベース作成は終わりです。
あとは、好きなように、ユーザーを作ってテーブルを作ったりしていきます。

ネットワーク経由で利用できるようにするには、リスナー の設定が必要になります。



作成日 2000/07/22 更新日 2000/07/22