管理用ユーザーの「sys」と「system」の使い分けについて

  • 2015.04.17 Friday
  • 13:55
オラクルをインストールすると自動でsysユーザとsystemユーザは作成されます。
どんなときにsysユーザで、どんなときにsystemユーザにするというのか?

■SYSユーザー
「SYS」+「SYSDBA」もしくは、「SYS」+「SYSOPER」で接続する
 権限付きログインし、以下の作業を行う
 →SYSOPER権限で出来ること
 ・インスタンスの起動、停止(startup / shutdown)
 ・データベースのオープン、マウント(alter database open / mount)
 ・制御ファイルのバックアップ(alter database backup controlfile)

 →SYSDBA権限で出来ること>
 ・データベースの作成、削除(create database / drop)
 ・データベースのリカバリ(recover database until *不完全リカバリも可能)


■SYSTEMユーザー
「SYSTEM」単体で接続する。
 権限なしでログインし、データディクショナリビューを見たり、表領域を作ったり、ユーザを作成したりする

要は特に重要なDB操作には、SYS+権限で行い、通常のDB操作にはSYSTEMを使うようにする。
ちなみに「SYS」も「SYSTEM」DB管理者用のユーザーである。

ORACLE、SQLServerの相違点

  • 2012.04.05 Thursday
  • 14:05
1.NullとEmptyの違い
  ORACLE : EmptyとNullを曖昧に判断する。
  SQLSERVER : EmptyとNullを明確に判断する。

2.Nullのソート順
  ORACLE : 昇順で、Null値は最後に配置される。
  SQLSERVER : 昇順で、Null値は先頭に配置される。

3.Null置き換え関数
  ORACLE : Nvl(Field,Value)
  SQLSERVER : IsNull(Field,Value)

4.Trim
  ORACLE : Trim存在する。
  SQLSERVER : RTrim/LTrimならある。

5.左文字詰め('0'埋めだと)
  ORACLE : LPAD([文字列],38,'0')
  SQLSERVER : REPLICATE('0',38-DATALENGTH([文字列]))+[文字列]

6.ロック(占有ロックとの事。。)
  Oracle : FOR UPDATE
  SQLSERVER : (UPDLOCK)

7.文字型→日付型変換
  ORACLE : TO_DATE('2000/01/01 10:20:30','yyyy/mm/dd hh24:mi:ss')
  SQLSERVER : CONVERT ( datetime,'2000/01/01 10:20:30',120)

8.日付型→文字型変換
  ORACLE : TO_CHAR(更新日時,'YYYYMMDD')
  SQLSERVER : CONVERT(varchar,更新日時,112)

9.システム日付
  ORACLE : SYSDATE(current_timestampも使えたが、グリニッジっぽい値になってしもうた。なぜ?)
  SQLSERVER : current_timestamp

10.文字列切り出し
  ORACLE : SELECT SUBSTR([文字列],2,2) FROM DUAL
  SQLSERVER : SELECT SUBSTRING([文字列],2,2)

11.数値→文字列変換
  ORACLE : TO_CHAR([文字列])
  SQLSERVER : 数値から文字型であれば、暗黙の変換で大丈夫。
        (明示的に書くならば、CAST or CONVERT使用)

12.文字列連結  
  ORACLE : ||
  SQLSERVER : +

13.JOIN時のテーブル別名
  ORACLE : 無くても動いた。。。
  SQLSERVER : テーブル別名必須っぽい?(UNIONにも必要とは。。)

14.EMPTY→数値型の更新について。
  ORACLE : EMTPY→数値型へ更新が可能。Nullの扱いとなる。
  SQLSERVER : EMPTY→数値型へ更新が不可。数値変換エラーとなる。

15.余分な0が付加される。(ドライバのせい?)
  ORACLE : NUMBER(15,5)型から数値1を、SELECTすると結果は、"1"
  SQLSERVER : NUMERIC(15,5)型から数値1を、SELECTすると結果は、"1.00000"

16.それぞれの予約語に注意。。

SQL ServerとOracleのトリガーの違い

  • 2012.04.05 Thursday
  • 13:43
・Oracleには、トリガで利用できるホスト変数(:NEWと:OLD)がある。
 →これは、対象となる行の変更前後の値を参照することができる変数である。
  このホスト変数は、以下のように利用する。
   変更後の値を利用したい場合 … :NEW.列名
   変更前の値を利用したい場合 … :OLD.列名
・DELETEステートメントの場合、「:OLD」を利用する。
 →変更後(既存)のデータは存在しないため、:OLDで変更前の値を取得する。
・INSERTステートメントの場合、「:NEW」を利用する。
 →変更前(既存)のデータは存在しないため、:NEWで新しい値を取得する。
・ホスト変数は、Oracle特有のものである。
 他のDBMSでは、変更前後のデータを格納する特殊なテーブルが用意されている。
 この特殊なテーブルを参照することになる。

・SQL Serverでは、以下のようなテーブルを参照する。
 1.INSERTトリガの場合、INSERTEDテーブルに追加した行のコピーが保持される。
 2.DELETEトリガの場合、DELETEDテーブルに削除した行のコピーが保持される。
 3.UPDATEトリガの場合、INSERTEDテーブルに変更後のデータ、DELETEDテーブルに変更前のデータが保持される。