読者です 読者をやめる 読者になる 読者になる

スキーマ作成

******************************

追記

そういや、「スキーマ」と「ユーザー」の違いがよく分かってないので調べた。例によってお世話になっているところ。もはや先生となるwebページ。

www.shift-the-oracle.com

******************************

 

 

 

SqlDeveloperでscott以外にスキーマを作ろうとして、Sql*Plusにて

******************************

SQL> create user kouhei
2 identified by kouhei
3 default tablespace kouhei_data
4 temporary tablespace kouhei_temp;

******************************

の結果…

******************************

行1でエラーが発生しました。:

ORA-00959: 表領域'KOUHEI_DATA'は存在しません。

******************************

って怒られた。

エラーコードの[ORA-00959]で検索。

okwave.jp

に行き着く。

どうも「テーブルを作る前に表領域tb_mstcom_111を先に作成するか、上記のtb_mstcom_111の部分を存在する表領域に変更すればいいと思います。」

らしい。

表領域の確保、または既に確保された表領域(名前のこと?)に変更する必要があるそう。

と思っていたらすぐ下にスクロールすると、

 

レベル10

 

ベストアンサー率 47% (66/140)

表領域が必要な場合は、CREATE TABLEでTABLESPACEを指定したときです。
上記でいえば、TABLESPACE ts_tb_data_1m を指定しているからです。
(表領域名はtb_mstcom_111ではなく、ts_tb_data_1mでした。)
この指定をなくせば、デフォルトの表領域に上記のテーブルtb_mstcom_111が作成されます。
デフォルトの表領域にテーブルを作りたくない場合にTABLESPACE句を指定してCREATE TABLEを実行します。
 

らしい。

しかし、今回は[CREATE TABLE] を用いていない。

次に当たったURLがここ

www.shift-the-oracle.com

 

おお。わかりやすい。

リンク先と全く同じ内容だが、リンクを踏むのが面倒な自分のために。

 

CREATE USER によるユーザーの作成

ユーザーの作成は、CREATE USER という DDL (Data Definition Language) にて行なう。
ユーザーを作成することでスキーマも作成される。

基本的な CREATE USER の構文

説明のパート毎にリンクになっています。

CREATE USER my_name
   IDENTIFIED BY "my_password"
   [DEFAULT TABLESPACE my_tablespace]
   [TEMPORARY TABLESPACE my_temp_tablespace]
   [PROFILE my_profile]

 

CREATE USER 文 の説明

CREATE USER ~ で指定したユーザー名 (my_name) でユーザーを作成する。

IDENTIFIED BY

ログインに使用するパスワードを設定する。Oracle 11g からパスワードの大文字小文字を区別するようになったので要注意。

DEFAULT TABLESPACE

このユーザーが CREATE TABLE や CREATE INDEX など、スキーマ・オブジェクト を作成するときのデフォルトの格納先(デフォルトの 表領域)を指定する。
省略可能であるが、省略すると SYSTEM 表領域 がデフォルトになる (※)
初めて DBCA でデータベースを作成した場合には USERS を指定しておく。

(※) システム表領域は Oracle が使用する表領域であり、かつ、ごみ箱機能が無効になっているので USERS 表領域などを使用することを強くお勧めする。

TEMPORARY TABLESPACE

Oracle が使用する作業用の表領域を指定する。メモリ内で収まらないソート、索引の作成や表の結合処理などの一時ワークエリアとして使用される。
省略可能であるが SYSTEM 表領域 がデフォルトになる。DEFAULT TABLESPACE 同様、省略しない方が良い。
初めて DBCA でデータベースを作成した場合には TEMP を指定しておく。

PROFILE

ユーザーが使用する プロファイル を指定する。
省略時には、事前定義済の DEFAULT プロファイルが設定される。

CREATE USER 使用例

SQLPlus にて my_nameというユーザを作成する。

 
SQL> conn / as sysdba
接続されました。
 
SQL> CREATE USER rivus
  2  IDENTIFIED BY "RIVUS_PASS"
  3  DEFAULT TABLESPACE users
  4  TEMPORARY TABLESPACE temp
  5  /
 
ユーザーが作成されました。

SYSDBA

好き勝手に動かしてもよいテスト環境であれば、DBA ロールの付与と表領域の使用量を無制限にしておくと良い。

 
SQL> GRANT DBA TO RIVUS ;
 
権限付与が成功しました。
 
SQL> GRANT UNLIMITED TABLESPACE TO RIVUS ;
 
権限付与が成功しました。

DBA ロール

 

今回の問題はここだと見受けられる。

DEFAULT TABLESPACE

このユーザーが CREATE TABLE や CREATE INDEX など、スキーマ・オブジェクト を作成するときのデフォルトの格納先(デフォルトの 表領域)を指定する。
省略可能であるが、省略すると SYSTEM 表領域 がデフォルトになる (※)
初めて DBCA でデータベースを作成した場合には USERS を指定しておく。

(※) システム表領域は Oracle が使用する表領域であり、かつ、ごみ箱機能が無効になっているので USERS 表領域などを使用することを強くお勧めする。

 

※の注釈にある「ゴミ箱機能」がよくわからないので、イマイチつかみどころがないがひとまずはおすすめされている[USERS]で作り直してみよう。

2回目に作る際は

PROFILE

ユーザーが使用する プロファイル を指定する。
省略時には、事前定義済の DEFAULT プロファイルが設定される。

について、省略するとする。なぜなら「プロファイル」が何を意味しているのかさっぱりだからだゾ。

結果

SQL> create user kouhei
2 identified by kapparappa
3 default tablespace users
4 temporary tablespace users
5 /
create user kouhei
*
行1でエラーが発生しました。:
ORA-10615: Invalid tablespace type for temporary tablespace

 

ぬ?ww

あwwww「;(セミコロン)」忘れてら。

ん、あ、違うw

「identified by ~~~~」のところで設定値(~~~~)をダブルクォーテーションで囲ってないからか。

 

リトライ。

結果

SQL> create user kouhei
2 identified by "kapparappa"
3 default tablespace users
4 temporary tablespace users
5 /
create user kouhei
*
行1でエラーが発生しました。:
ORA-10615: Invalid tablespace type for temporary tablespace

 

お、おうwまた違うエラーかw

[ORA-10615]で検索。

行き着いたURL

http://otn.oracle.co.jp/forum/message.jspa?messageID=35042398

******************************

おそらく SYSTEM 表領域がローカル管理だから、一時表領域もローカル管理の専用ものが必要、
ということかと。

******************************

 

ふむ。つまり、3行目の[default tablespace]と4行目の[temporary tablespace]は別の領域を指定する必要があるわけか。

 

どれどれ。

っていうか…

TEMPORARY TABLESPACE

Oracle が使用する作業用の表領域を指定する。メモリ内で収まらないソート、索引の作成や表の結合処理などの一時ワークエリアとして使用される。
省略可能であるが SYSTEM 表領域 がデフォルトになる。DEFAULT TABLESPACE 同様、省略しない方が良い。
初めて DBCA でデータベースを作成した場合には TEMP を指定しておく。

わざわざ「初めてのDBCAでデータベースを作成した場合はTEMP」を指定って書いてくれてたやん。斜め読みはよくないですなぁ。

リトライ。

******************************

 

SQL> create user kouhei
2 identified by "kapparappa"
3 default tablespace users
4 temporary tablespace temp
5 /

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

******************************

 

おおおおお。できたできた。

ここまででなんだかんだ1時間半とか、ユーザー(スキーマ)作成でだいぶかかってますな。

 

好き勝手に動かしてもよいテスト環境であれば、DBA ロールの付与と表領域の使用量を無制限にしておくと良い。

 
SQL> GRANT DBA TO RIVUS ;
 
権限付与が成功しました。
 
SQL> GRANT UNLIMITED TABLESPACE TO RIVUS ;
 
権限付与が成功しました。

DBA ロール

よくわからんが、「好き勝手に動かしてもよいテスト環境であれば、DBA ロールの付与と表領域の使用量を無制限にしておくと良い。」らしい。

好き勝手いじるためのPC引いては端末なのでこの設定を付与しておく。

 

SQL> grant dba to kouhei;

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

SQL> grant unlimited tablespace to kouhei;

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

 

うむ。ひとまずこのところで区切ろう。腹減った。

 

~後日調べる単語(2017_0406)~

・プロファイル

・DBAロール

・表領域

 

3か月後にはちゃんと理解してっかなー。