...

Oracle Rdb

by user

on
Category: Documents
12

views

Report

Comments

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
Fly UP