Comments
Description
Transcript
Oracle Rdb
Day1-7 SQL に関する更新情報 ジョン ハワード Oracle Rdb エンジニアリング 東京 2006年 4月 3日 大阪 2006年 4月 5日 ©2005-2006, Oracle Corporation 講演の内容 • ドキュメントの更新 • RMU Extract • • • • クェリガバナ 新しいSQLネイティブ関数 DDLの変更 プリコンパイラとSQLモジュール言語 • その他 2 ドキュメント 7.1のドキュメント • 7.1.3のSQLオンライン・ヘルプを再作成 • V7.1.4.1用にSQLリファレンス・マニュアル を更新 4 7.2のドキュメント • RdbおよびRMUオンライン・ヘルプを再作成 • 更新されたOracle Rdbのガイドとマニュアル: • • • • 『Rdb Installation and Configuration Guide』 『SQL/Services Configuration Guide』 『Guide to Distributed Transactions』 『RMU Reference Manual』 • リリースノートとインストール・ガイド: CDD、Trace、ROR(DDAL)、DBMS • SQLリファレンス・マニュアルとオンライン・ ヘルプは、7.2.0.1用に更新の予定 5 RMU Extract RMU Extract • V7.1.3用VIEW Extractを大幅にリライト • ネストされた派生テーブルのサポート • 結合の各種組み合わせ • UNION、EXCEPT、INTERSECTのサポート強化 • V7.1 RMU ExtractをV7.0.8リリース (サブセット 機能)に移動することを決定 • 7.0.8リリースノートでドキュメント更新を検索 • MATCHやGROUP_TABLEなど新しいオプショ ンのサポート 7 RMU Extract • 新しい/DEFAULTS修飾子で、ダイアレクト、 言語、割り当て合計を設定 • 現在、スクリプト・ヘッダはQUOTING RULESを‘SQL92’ 、DEFAULT DATE FORMAT を‘SQL92’に設定 • 修飾子を使って、生成したスクリプトを変更 /DEFAULT=(DATE_FORMAT=“VMS”, LANGUAGE=SWEDISH,NOALLOCATI ON) 8 クェリガバナ クエリー・タイムアウト [レビュー] • V4.1で追加されたクェリガバナコントロール • RDMS$BIND_QG_TIMEOUT • RDMS$BIND_QG_REC_LIMIT • V4.2で追加されたコントロール • RDMS$BIND_QG_CPU_TIMEOUT • タイムタウトは、クエリーのコンパイル時間 • 取得した行の制限値 10 クエリー・タイムアウト [新規] • V7.1.2.4で新規追加 • RDMS$BIND_QG_EXEC_CPU_TIMEOUT • RDMS$BIND_QG_EXEC_ELAPSED_TIMEOUT • クエリーの実行を制御 注: 名前に‘exec’ が含まれる 11 QGインタフェース • 複数のインタフェースによるコントロール • • • • • 論理名 Interactive SQL SET文 Dynamic SQL SET文 モジュール言語とプリコンパイラの修飾子 RMU Show Statisticsダッシュボード (execで制御) • Rdb SQL.INITファイル、OCI Servicesで 使用できる新しい動的サポート 12 例1: SQL> set query execution cont> limit elapsed time 5 minutes; . 単位。 . デフォルトは秒 . SQL> delete from EMPLOYEES; %RDB-E-EXQUOTA, Oracle Rdb runtime quota exceeded -RDMS-E-MAXTIMLIM, query governor maximum timeout has been reached SQL> 13 例2: SQL> set query execution limit elapsed time 2 seconds; SQL> delete from EMPLOYEES; %RDB-E-EXQUOTA, Oracle Rdb runtime quota exceeded -RDMS-E-MAXTIMLIM, query governor maximum timeout has been reached SQL> show query limit; Query limit Time is OFF Query limit Row count is OFF Query limit CPU time is OFF Execution limit CPU time is OFF Execution limit Elapsed time 0 00:00:02.00 (2 seconds) Execution limit Row count is OFF SQL> set query execution nolimit elapsed time; 14 QGに関する注意事項 • ‘exec’ オプションは、プロセス全体に適用 • セッション内のすべてのデータベース・アタッチに 影響 • レイジー・タイマでオーバーヘッドが短縮されるた め、正確なタイムアウトでない場合がある • データベースI/Oの実行中のみのチェックなので、 外部関数などCPU集中型のSQLプロシージャは タイムアウトしない • RMU Show Statisticsダッシュボードを使うと、タイ ムアウトの動的調整が可能 15 新しいSQLネイティブ関数 ROUNDとTRUNC • 数値のROUNDとTRUNCは、現在、ネイテ ィブRdb関数 • V7.0からV7.1.3までは、 SQL$FUNCTIONSライブラリ内のDOUBLE PRECISION関数として提供 • 下位互換性はあるが、一貫した動作は しない 17 ROUNDとTRUNC • 現在、TINYINT、SMALLINT、INTEGER、 BIGINT、REAL、DOUBLE PRECISIONなどの 値をサポート • DATEの改良型は、Rdb Server経由でOCI Services for Rdbにディスパッチ。 DATE ANSI、TIMESTAMP、DATE VMSも拡張サポ ート 18 RDB$$IS_ROW_FRAGMENTED • 断片化した行を検出するオプション関数 • DECLARE FUNCTIONを使って、 Interactive SQLでアクティブ化する必要が ある • リリースノートで示すように、正確な構文を 使用する必要がある • DBKEYを受け取り、0(断片化なし)または 1(断片化あり)を返す 19 例3: SQL> declare function RDB$$IS_ROW_FRAGMENTED cont> (in :dbk char(8) character set unspecified) cont> returns integer; SQL> SQL> select dbkey, cont> RDB$$IS_ROW_FRAGMENTED (dbkey) cont> from work_status; DBKEY 99:10:12 0 99:10:13 0 99:10:14 0 3 rows selected 20 DDLの変更 Computed Columns • ALTER TABLE … ALTER COLUMNは、 COMPUTED BYまたはAUTOMATIC AS で計算式の変更を許可 • これまでは、列にDROP/CREATEを実行 する必要があった • プロシージャ、トリガ、制約で使用すると問 題が発生した 22 Computed Columns • 列の‘class’ を変更できない • • • • Computed by Automatic as Automatic Insert as Automatic Update as • 新しい行バージョンを作成、古い AUTOMATICデータは新しい型に変換 23 DECLAREとUNDECLARE • Interactive SQLでは、ローカル変数を宣言 し、デフォルト値を割り当てることが可能 • 変数の削除には、UNDECLARE文を使用 • これらの文は、動的SQLでもサポート • 注: SQL$PREにおけるホスト変数の仕様に に近い 24 Declareの例 SQL> declare :employee_id ID_NUMBER = ‘00164’; SQL> select last_name from employees cont> where :employee_id = employee_id; LAST_NAME Toliver SQL> undeclare :employee_id; • 注: DECLAREでは、編集文字列はドメイン から継承される 25 Alter Sequence • SQL:2003構文をサポート • RESTART WITH句 • 指定した値で始まるようにシーケンスをリセット • MINVALUEからMAXVALUEの範囲内の値 • TRUNCATE TABLEでIDENTITY列に 使用 • テーブルを削除すると、IDENTITY列は1から始まる 26 Alter View • ビュー属性を変更 • COMMENT IS COMMENT ON VIEW文と同義 • RENAME TO RENAME VIEW文と同義 • WITH CHECK OPTION ビューのWHERE条件の制約を適用 • WITH NO CHECK OPTION 27 Alter View • AS SELECT … FROM … WHERE • テーブルのSELECT式を再定義 • 列のソース式を再定義 • ビューでの依存関係を保持 • 列の名前、順序、番号は変更できない 28 Alter View SQL> create view DEPARTMENTS_SUMMARY cont> as cont> select department_code, d.department_name, cont> d.manager_id, jh.employee_count cont> from departments d inner join cont> (select department_code, count (*) cont> from job_history cont> where job_end is null cont> group by department_code) cont> as jh (department_code, employee_count) cont> using (department_code); SQL> 29 Alter View(例) • ビューDEPARTMENTS_SUMMARYは、ストアド・ プロシージャ、ビュー、その他で使用される • ビューを変更するには、DROP VIEW … CASCADEを実行し、CREATE VIEW(最低必要な 操作)で依存関係ツリーを再作成する必要がある • DBAは、EMPLOYEE_COUNTを静的な列にする ことでクエリーのチューニングを行い、レポート・ア プリケーションによる連続的な演算を回避 30 Alter View SQL> alter view DEPARTMENTS_SUMMARY cont> as cont> select department_code, d.department_name, cont> d.manager_id, d.employee_count cont> from departments d; SQL> • ビュー名、列名、列の順序は変更されない - 依存関係を壊すことがなく、階層構造の 再構築も不要 31 Alter View • ビューは、更新可能から読み出し専用に変 更できる • 列は、読み出し専用に変更可能 • 慎重に操作しないと、実行時に例外が報 告される 32 Storage Maps • Create Storage MapとAlter Storage Mapで、 特殊な「システム」 ルーチンを Rdb$Storage_Mapsモジュールに作成 • アプリケーションは、指定した列のターゲッ ト・パーティションを判断(USING句を参照) • 既存のストレージ・マップへの追加は、 ALTER STORAGE MAP … COMPILE を 使用 33 例4: SQL> show system module Modules in database with filename mf_personnel RDB$STORAGE_MAPS SQL> show system function Functions in database with filename mf_personnel CANDIDATES_MAP COLLEGES_MAP DEGREES_MAP DEPARTMENTS_MAP EMPLOYEES_MAP … 34 例5: SQL> show function EMPLOYEES_MAP Information for function EMPLOYEES_MAP Function ID is: -2 Source: return case when (:EMPLOYEE_ID <= '00200') then 1 when (:EMPLOYEE_ID <= '00400') then 2 else 3 end case; Comment: Return value for select partition - range 1 .. 3 … 35 例5(続き) Module name is: RDB$STORAGE_MAPS Module ID is: -1 Number of parameters is: 1 Parameter Name Data Type Domain or Type ----------------------------------INTEGER Function result datatype Return value is passed by value EMPLOYEE_ID CHAR(5) Parameter position is 1 Parameter is IN (read) Parameter is passed by reference 36 プリコンパイラと モジュール言語 /PROTOTYPES • 前のバージョンでは、/C_PROTOTYPESを C言語のみでサポート • 現バージョンではPascalとBlissにサポートを 拡張し、Basicでもサポートの予定 • モジュール言語ルーチンの外部宣言を行う • Cのサポートを拡張し、ANSI CおよびC++と の互換性を確保 38 Prototypes • モジュール言語ルーチン用インタフェース を簡易化 • SQLモジュール言語を使用するRMUツー ル用にRdb開発グループが使用 • モジュールのLANGUAGE句で使用するた めの、出力ファイルを作成 39 例 • LANGUAGE Cを使用 • SQL$MOD/PROTOTYPEでコンパイル • デフォルトのファイル名はソース.SQLMODから取得 • デフォルトのファイルタイプは言語ごと • Cソースには、生成ファイルが含まれる 40 ソースモジュール言語 module SAMPLE language C parameter COLONS declare alias filename SQL$DATABASE procedure START_TRANSACTION (sqlcode); start transaction; procedure COMMIT_TRANSACTION (sqlstate); commit work; 41 .hヘッダファイルの生成 /* Generated by Oracle Rdb SQL X7.1-00 at 10-FEB-2005 13:47:52.70 */ /* Source file is USER2:[TESTER.RDB$TEST_SYSTEM]XX.SQLMOD;1 */ #ifndef _SAMPLE_H_ #define _SAMPLE_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern void START_TRANSACTION ( long *SQLCODE ); extern void COMMIT_TRANSACTION ( void *SQLSTATE ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _SAMPLE_H_ */ 42 /* out */ /* out */ その他 その他 • 新しいGET DIAGNOSTICSキーワード • • • • LIMIT_CPU_TIME LIMIT_ROWS_FETCHED LIMIT_ELAPSED_TIME TRACE_ENABLED (7.1.4) • 新しい中国語文字セット: GB18030(GB180302000標準で規定)は、中華人民共和国が使用 (7.1.4.1) • Dynamic EXECUTE文はINTO変数リストをサポ ート • 以前のバージョンでは、SQLDAが必要 44 TRACE_ENABLED SQL> declare :x integer; SQL> begin get diagnostics :x = TRACE_ENABLED; end; SQL> print :x; X 0 SQL> set flags 'trace'; SQL> begin get diagnostics :x = TRACE_ENABLED; end; SQL> print :x; X 1 45 認証 • V7.1.2.4から、DCL SET UICコマンドのサポート を強化 • コマンドには、SUBMIT/USERNAMEと同様に、 CMKRNLが必要 • UICを使って、最初にマッチするユーザを検索 • SQL/ServicesとOCI Servicesの統合化を強化 • 特殊な他ユーザでの認証(impersonation)を簡易 化 46 SET UICの例 $ set uic jain $ sql$ SQL> attach 'file sql$database'; SQL> show privileges on database rdb$dbhandle; Privileges on Alias RDB$DBHANDLE (IDENTIFIER=[RDB,JAIN],ACCESS=SELECT+INSERT+ UPDATE+DELETE+SHOW+CREATE+ALTER+DROP+ DBCTRL+OPERATOR+DBADM+SECURITY+ DISTRIBTRAN) 47 新しいLIMIT TO構文 • 7.2から、LIMIT TO句の拡張によって行の スキップが可能 • 構文: LIMIT TO n SKIP m ROWS • SELECTは、最初のm行をフェッチして処理 するが、アプリケーションには返されない 48 LIMIT TO … SKIPの例 SQL> ! Return employee with highest employee ID SQL> select last_name, first_name, employee_id cont> from employees cont> order by employee_id cont> limit to 1 cont> skip (select count(*)-1 from employees) rows; LAST_NAME FIRST_NAME EMPLOYEE_ID Herbener James 00471 1 row selected 49 詳細情報 • • • • • 50 www.oracle.com/rdb metalink.oracle.com www.hp.com/products/openvms [email protected] [email protected] ご質問は www.oracle.com/rdb