スキーマ作成
******************************
追記
そういや、「スキーマ」と「ユーザー」の違いがよく分かってないので調べた。例によってお世話になっているところ。もはや先生となるwebページ。
******************************
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]で検索。
に行き着く。
どうも「テーブルを作る前に表領域tb_mstcom_111を先に作成するか、上記のtb_mstcom_111の部分を存在する表領域に変更すればいいと思います。」
らしい。
表領域の確保、または既に確保された表領域(名前のこと?)に変更する必要があるそう。
と思っていたらすぐ下にスクロールすると、
上記でいえば、TABLESPACE ts_tb_data_1m を指定しているからです。
(表領域名はtb_mstcom_111ではなく、ts_tb_data_1mでした。)
この指定をなくせば、デフォルトの表領域に上記のテーブルtb_mstcom_111が作成されます。
デフォルトの表領域にテーブルを作りたくない場合にTABLESPACE句を指定してCREATE TABLEを実行します。
らしい。
しかし、今回は[CREATE TABLE] を用いていない。
次に当たったURLがここ
おお。わかりやすい。
リンク先と全く同じ内容だが、リンクを踏むのが面倒な自分のために。
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か月後にはちゃんと理解してっかなー。