オラクルマスターをめざすひと、Oracle Databaseを知りたいひとへ、情報発信しているHPです




◆ ◆ ◆ Oracle Database 10g release2 で何が変わったか?(その2)  ◆   
 
米国オラクルのPDF資料からrelease2の概略の紹介を続けます

 

 ◆  DML文のエラー・ログ出力句の追加   ◆   
DML文のエラーがどこで起こり、どのようなエラーだったかをログ・ファイルへ出力できるので開発段階などで便利です
●DML文のLOG ERRORS句指定で、エラー情報をログ・ファイルへ出力します
構文: ・・ DMLの記述 ・・
     LOG ERRORS [ INTO エラーログ・ファイル名 [ ( 式 ) ]
         REJECT LIMIT { integer | UNLIMITED }

・DML文(DELEITE,MERGER,INSERT,UPDATE)で、LOG ERRORS句を指定できます
・エラー・ログの出力ファイル名は、DBMS_ERRLOGパッケージで作成します(省略可能)
 (デフォルトは、ERR$_で始まり、その後に表名の最初の25文字が付加される)
・REJECT LIMIの値で、DML文を終了またはロールバックする最大エラー数を指定します
 デフォルトのREJECT LIMIT値は、Oです
・式には、文字定数、数値定数、TO_CHAR(SYSDATE)等を指定します(式のことをタグと呼んでいます)
 (式の値は、個別のDML文の情報で、いつ、どのDML文で起こったかのエラー情報になります)
・以下のような場合に、エラー情報がログ・ファイルへ出力されます
 ・列のサイズや精度では、格納できない場合
 ・制約違反の場合(NOT NULL,CHECK,参照整合制約、主キー、一意キー制約)
 ・トリガー例外の場合
 ・パーティションのマッピング・エラーの場合
 ・データ変換エラーの場合
・以下の場合には、ログに出力しません
 ・遅延制約定義の場合
宿題:ログ・ファイルへ出力されないエラーには、どのようなものがあるのか?

《例》PDF資料内の例を以下に示します(INSERT文のLOG ERROR句とログ・ファイル形式の例です)

 EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('raises','errlog'); ←ログ・ファイルの作成

 INSERT INTO raises
     SELECT employee_id, salary*1.1 FROM employees WHERE commission_pct > 0.2
          LOG ERRORS INTO errlog (’my_bad’) REJECT LIMIT 10;

 SELECT ORA_ERR_MESG$, ORA_ERR_TAG$, emp_id, sal FROM errlog;
 ORA_ERR_MESG$               ORA_ERR_TAG$         EMP_ID SAL
 --------------------------- -------------------- ------ -------
 ORA-02290: check constraint my_bad               161    7700
 (HR.SYS_C004266) violated

《参考》DBMS_ERRLOGパッケージのCREATE_ERROR_LOGプロシージャの構文
 DBMS_ERRLOG.CREATE_ERROR_LOG (
  dml_table_name      IN VARCHAR2,
  err_log_table_name  IN VARCHAR2 := NULL,
  err_log_table_owner IN VARCHAR2 := NULL,
  err_log_table_space IN VARCHAR2 := NULL,
  skip_unsupported    IN BOOLEAN := FALSE);
 

 ◆  表の列の暗号化   ◆   
表の列単位で、簡単に暗号化の指定ができます
●列の内容を暗号化するENCRYPT句が、表の作成または変更機能に追加されました
構文:CREATE TABLE/ALTER TABLE
        ・・ 表の定義 ・・・
       列名 データ型 [ DEFAULT 式 ]
           [ ENCRYPT [ USING ’ 暗号化アルゴリズム ’]
           [ IDENTIFIED BY パスワード] [{ SALT | NO SALT}]

・指定できる列は、CHAR,NCHAR,VARCHAR2,NVARCHAR2,NUMBER,DATE,RAW型です
・USING句で、使用する暗号化アルゴリズムを指定します
 有効なアルゴリズムは、3DES168,AES128,AES192,AES256です(デフォルトは、AES192)
・SALT/NO SALTで、暗号化するデータを指定できます
  SALT.......データにランダムに作成した文字を付加して暗号化します(デフォルト)
  NO SALT....データそのものを暗号化します(索引を設定する列には、NO SALTを指定します)

制限事項:以下のような列を暗号化することはできません
 ・外部表の列(暗号化には、ORACLE_DATAPUMPを使用します)
 ・SYSユーザーが所有する表の列
 ・外部キーの列
・暗号化した列は、以下のビューで確認できます
  DBA_ENCRYPTED_COLUMNS
  ALL_ENCRYPTED_COLUMNS
  USER_ENCRYPTED_COLUMNS

《例》PDF資料内の例を以下に示します
 CREATE TABLE hr.admin_emp (
  empno NUMBER(5) PRIMARY KEY,
  ename VARCHAR2(15) NOT NULL,
  ssn NUMBER(9) ENCRYPT,
  job VARCHAR2(10),
   ......
●表の列に指定した暗号化を解除するには、DECRYPT句を指定します
構文:ALTER TABLE
       ・・ 表の定義 ・・・
       列名 データ型 [ DEFAULT 式 ]  DECRYPT
 

 ◆  表の暗号化のために必要な操作   ◆   
Oracle Wallet Managerで行っていた操作をSQL文レベルで行います。Oracle Advanced Securityでネットワークを流れるデータを暗号化できますが、データベース内部においても暗号化が必要か(暗号化バックアップについては後述します)
●暗号化のための主キーを作成します
構文:ALTER SYSTEM
    SET ENCRYPTION KEY
    [ 'certificate_id’] IDENTIFIED BY "パスワード"
;
・表の列の暗号化は、キー・ベースで制御します
・キーは、暗号化キーとしてOracle walletで管理します
・PKIベースの認証を行っている場合には、certificate_IDとして認証IDを指定します(デフォルトはなし)
・certificate_IDは、WALLETがオープン状態の時、V$WALLETで調べることができます
《例》PDF資料内の例を以下に示します
 ALTER SYSTEM SET ENCRYPTION KEY "j23lm781098dhb345sm" IDENTIFIED BY "p3812dH9E";
●表の暗号化した列へのアクセスを許可します(暗号化WALLETのオープン)
構文:ALTER SYSTEM
         SET ENCRYPTION WALLET OPEN IDENTIFIED BY "パスワード";

・オープンするとデータベースが停止するまで、暗号化のための暗号化キーにアクセスできます
・暗号化キーは、Oracle walletで管理します
・再起動またはwalletをCLOSEした場合には、再度walletをオープンする必要があります
●表の暗号化した列へのアクセスを禁じます(暗号化WALLETのクローズ)
構文:ALTER SYSTEM
     SET ENCRYPTION WALLET CLOSE
;
・表の暗号化した列にアクセスできなくなります
 

 ◆  一時ファイル名の変更   ◆   
ALTER DATABASE文で、データ・ファイルやREDOログ・ファイルのメンバーの変更だけでなく、一時ファイル名を変更できるようになりました
●ALTER DATABASE文のRENAME句で、一時ファイル名を変更できます
構文:ALTER DATABASE [データベース名]
     RENAME FILE '旧ファイル名' TO '新ファイル名';

・ALTER DATABASE文で、一時ファイルの名前を変更できます
・一時ファイルの名前を変更するには、データベースがMOUNT状態時で行います
・データベースがOPEN状態の場合、一時ファイルをオフライン状態にしてファイル名を変更します
・名前の変更は、データベースの制御ファイルに対する変更で、実際のOSファイルの移動または変更は、
 この命令では行いません(実際のOSファイルの移動または変更するコマンドを行う必要があります)

《参考》ALTER DATABASE文のRENAME句では、データ・ファイル、REDOログ・ファイル、一時ファイルの名前を変更することができます。変更は、MOUNT状態またはOPEN状態でファイルをOFFLINEにして行います
但し、REDOログ・ファイルは、MOUNT状態でのみ変更可能です

《例》PDF資料内の例を以下に示します(データベースは、OPEN状態なので、ファイルをOFFLINEで操作します)

  ALTER DATABASE TEMPFILE 'temp02.dbf' OFFLINE;

  ALTER DATABASE RENAME FILE 'temp02.dbf' TO 'temp03.dbf';
 

>>続きへ
 
■ご質問およびお問い合わせは、こちらへ

Copyright(C) 2002-2005 めざせオラクルマスター. All rights reserved.