以前使っていたSQLServerとオラクルの違いに戸惑う。
SQLServerではコミットとかあまり気にしたことがなかった。
まぁ気にしなくても問題のないデータベース処理だったと
言うべきか。
オラクルではINSERTやUPDATE処理後に必ずコミットをしなければ
データベースには反映されない。
同じセッションだと一見、反映されたように見えるんだけど。
ロールバックするとどこまで戻るの?という不安と共に(笑)
コマンドを実行することもままある。
コミットするのはもっと勇気?がいるけど。(うそ)
SQLServerでコミットとかあまり気にしたことがなかったのは、
自動コミットトランザクションモードとやらがデフォルトだから。
要するにINSERTやらUPDATEが一行ごとにコミットされてしまう。
ではオラクルは?というと・・・。
明示的なトランザクションモードが基本。
'commit'を処理するまで、INSERTやらUPDATEは仮のものとなる。
ただし、DDLとやらは暗黙コミットというらしくユーザーが制御
出来ないところでオラクルがコミットするらしい。
DDLとはデータ定義言語/Data Definition Languageだそうな。
CREATEとかDROPとかそういったもの。
なるほど。そういえば、オラクルでテーブルを作成したりすると、
コミットしなくてもテーブルが出来る。なるほどなー。
これで疑問が一つ解決したわ。
テーブルをCREATEした時に何でコミットが必要ないんだろうか?
密かに疑問だったんだよねー。
そういえばAccessってどうだったんだろうか?
DB本体をGUIでさわってた時にコミットとか気にしたことが
なかった気がする。(多分)
でもADODBを使っプログラミングする時は使ってた気がする。
っとここまで色々書いておいて基本的な操作の違いを忘れていた。
AccessとかSQLServerだと、直接データベースをさわれる。
例えば、行の追加(INSERT処理)とかが、GUIベースで出来る。
が、オラクルは?というと・・・。
いちいちコマンドを実行しないと行の追加とかが出来なかったりする。
Osqleditとかいうツールを使えば、同じような感じにはなるんだけど。
が、保存(commit処理)がちゃんとある。(当たり前?)
一番びっくりしたのは、AccessとかSQLServerだと、GUIが標準なのに
オラクルだとGUIがないっ!
なんとOsqleditはシェアウェアなんだな。
道理で前の会社の上司が嫌うはずだ。w
テーブルの作成とかがGUIじゃないのはオラクルぐらいか?
(Access、SQLServer、Oracleのなかでは。)
全てコマンド処理がベースのオラクル。
テーブル一つ作るのに権限の付与が必要。
それ以前にユーザーを作るコマンドが必要だ。
CREATE USER usr
IDENTIFIED {BY password |
EXTERNALLY |
GLOBALLY AS 'external_name'}
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE {tablespace | tablespace_group_name}]
[QUOTA {integer [K | M] | UNLIMITED} ON tablespace]
[PROFILE profile]
[PASSWORD EXPIRE]
[ACCOUNT {LOCK | UNLOCK}];
http://www.atmarkit.co.jp/fdb/ref/ref_oracle/user.html
上記を参考に。
全ての権限を与える?には、下記コマンドで。
GRANT ALL PRIVILEGES to usr;
権限はあるはずなのに、V$SESSIONテーブルが見れないのは
なぜだろう?
GRANT SELECT ANY DICTIONARY to usr;
が必要だったらしい。
http://www.atmarkit.co.jp/fdb/ref/ref_oracle/privi.html
によると、「ALL PRIVILEGESを指定すると、SELECT ANY DICTIONARY権限
を除き、すべてのシステム権限を付与できます。」
とのこと。
V$SESSIONはオラクルのデータ・ディクショナリとやららしいので、
selectすら出来なかった模様。
ということは・・・逆にALL PRIVILEGESとSELECT ANY DICTIONARY権限
さえ与えていれば全ての権限があることになるのか?
ややこしすぎて何がなんだか?^^;
なぜGUIになってないのだろう?
とりあえずそんな感じ。φ(..)メモメモ