sqltoolユーザーズガイド -...
TRANSCRIPT
-
J2UL-1606-02Z0(00)2012年11月
Windows/Solaris/Linux
Symfoware Server V11.0.x
SQLTOOLユーザーズガイド
-
まえがき
本書の目的
本書は、Symfoware/SQLTOOLの使用方法を説明しています。
本書の読者
本書は、Symfoware/SQLTOOLを使用し、アプリケーション開発や性能チューニングを行う方に読んでいただくように書かれています。
本書を読むためには、以下の知識が必要です。
・ コンピュータについての一般的な知識
・ リレーショナルデータベースについての知識
・ Symfowareデータベースについての知識
・ SQLに関する知識
・ データベースシステムの性能チューニングに関する知識
・ 業務に関する知識
本書の構成
本書の構成と内容は以下のとおりです。
第1章 Symfoware/SQLTOOLの概要
Symfoware/SQLTOOLの概要について説明しています。
第2章 Symfoware/SQLTOOLの使用方法
Symfoware/SQLTOOLの環境設定、起動と停止について説明しています。
第3章 アプリケーション開発を支援する
Symfoware/SQLTOOLを使って、アプリケーション開発を支援する方法について説明しています。
第4章 データベースをチューニングする
Symfoware/SQLTOOLを使って、データベースをチューニングする方法について説明しています。
第5章 制御文リファレンス
Symfoware/SQLTOOLで利用できる制御文について説明しています。
コマンド操作例について
本書で説明しているコマンド操作例は、UNIX系システムを前提として記載しています。Windows(R)で操作する場合は、以下の表に従って読み替えてください。
UNIX系での操作の場合 Windows(R)での操作の場合
/tmp/out_data E:\TMP\OUT_DATA
/tmp/sqlfile.txt E:\TMP\SQLFILE.TXT
/tmp/plan E:\TMP\PLAN
/tmp/trace.log E:\TMP\TRACE.LOG
/tmp/sql.snp E:\TMP\SQL.SNP
/tmp/tbl.log E:\TMP\TBL.LOG
/tmp/exec.log E:\TMP\EXEC.LOG
/tmp/index.log E:\TMP\INDEX.LOG
- i -
-
UNIX系での操作の場合 Windows(R)での操作の場合
/tmp/statistics.log E:\TMP\STATISTICS.LOG
平成24年 7月 初版
平成24年 11月 第2版
著作権
Copyright 2002-2012 FUJITSU LIMITED
- ii -
-
目 次
第1章 Symfoware/SQLTOOLの概要.........................................................................................................................................11.1 Symfoware/SQLTOOLの機能............................................................................................................................................................1
1.1.1 アプリケーションの開発支援機能................................................................................................................................................11.1.2 データベースのチューニング機能...............................................................................................................................................31.1.3 サービス機能................................................................................................................................................................................4
1.2 Symfoware/SQLTOOLの適用範囲....................................................................................................................................................5
第2章 Symfoware/SQLTOOLの使用方法.................................................................................................................................92.1 環境設定.............................................................................................................................................................................................9
2.1.1 環境設定(Solaris/Linux)..............................................................................................................................................................92.1.2 環境設定(Windows)..................................................................................................................................................................10
2.2 rdbexecsqlコマンドからの利用..........................................................................................................................................................112.2.1 Symfoware/SQLTOOLの起動...................................................................................................................................................112.2.2 Symfoware/SQLTOOLの停止...................................................................................................................................................132.2.3 rdbexecsqlコマンドで扱うSQL文の範囲....................................................................................................................................132.2.4 文字コード系の指定...................................................................................................................................................................142.2.5 出力形式....................................................................................................................................................................................152.2.6 データの表示形式......................................................................................................................................................................162.2.7 トランザクション制御...................................................................................................................................................................192.2.8 複数行指定................................................................................................................................................................................212.2.9 引数による可変要素の指定.......................................................................................................................................................222.2.10 SQL文でのエラー発生時の対処.............................................................................................................................................232.2.11 rdbexecsqlコマンドの排他について.........................................................................................................................................262.2.12 出力メッセージと対処...............................................................................................................................................................272.2.13 処理を中断する場合................................................................................................................................................................29
2.3 アプリケーションからの利用..............................................................................................................................................................29
第3章 アプリケーション開発を支援する.....................................................................................................................................303.1 データベースを構築する..................................................................................................................................................................303.2 データベースを操作する..................................................................................................................................................................32
第4章 データベースをチューニングする....................................................................................................................................354.1 データベースのチューニング作業....................................................................................................................................................35
4.1.1 データベース構築時..................................................................................................................................................................354.1.2 アプリケーション開発時..............................................................................................................................................................354.1.3 性能検証チューニング時...........................................................................................................................................................364.1.4 業務への機能追加時.................................................................................................................................................................37
4.2 アクセスプランを取得する.................................................................................................................................................................374.2.1 rdbexecsqlコマンドを使用してアクセスプランを取得する.........................................................................................................384.2.2 アプリケーションからアクセスプランを取得する........................................................................................................................384.2.3 アクセスプランの取得内容.........................................................................................................................................................394.2.4 アクセスプランの出力形式.........................................................................................................................................................404.2.5 アクセスプランの出力例.............................................................................................................................................................55
4.3 SQL性能情報を取得する.................................................................................................................................................................584.3.1 rdbexecsqlコマンドを使用して実行時のSQL性能情報を取得する..........................................................................................584.3.2 rdbexecsqlコマンドを使用してSQL_SNAP情報を取得する.....................................................................................................584.3.3 アプリケーションからSQL性能情報を取得する.........................................................................................................................594.3.4 アプリケーションからSQL_SNAP情報を取得する....................................................................................................................594.3.5 SQL性能情報の取得内容.........................................................................................................................................................604.3.6 SQL性能情報の出力形式.........................................................................................................................................................61
4.3.6.1 SQL文情報..........................................................................................................................................................................654.3.6.2 セクション情報.....................................................................................................................................................................664.3.6.3 実行エレメント情報..............................................................................................................................................................66
4.3.7 SQL性能情報の出力例.............................................................................................................................................................784.4 アドバイスを取得する........................................................................................................................................................................99
- iii -
-
4.4.1 RDBシステム単位にアドバイスを取得する.............................................................................................................................1004.4.2 SQLアドバイザの取得内容......................................................................................................................................................1014.4.3 SQLアドバイザの出力形式......................................................................................................................................................1014.4.4 SQLアドバイザの出力例..........................................................................................................................................................102
4.5 最適化情報をチューニングする.....................................................................................................................................................1034.5.1 最適化情報を変更する............................................................................................................................................................1034.5.2 最適化情報を表示する............................................................................................................................................................103
4.6 動作環境をチューニングする.........................................................................................................................................................1044.6.1 動作環境の動的変更...............................................................................................................................................................1044.6.2 実行パラメタの表示..................................................................................................................................................................106
4.7 ASSIST指定でアクセスプランを固定化する..................................................................................................................................106
第5章 制御文リファレンス.......................................................................................................................................................1075.1 制御文一覧表.................................................................................................................................................................................1075.2 ACCESS PLAN文...........................................................................................................................................................................1105.3 CALL文...........................................................................................................................................................................................1115.4 CHANGE ENV文............................................................................................................................................................................1115.5 COLUMN文....................................................................................................................................................................................1215.6 COLUMN FORMAT文..................................................................................................................................................................1215.7 COMMIT文.....................................................................................................................................................................................1225.8 CONNECT文...................................................................................................................................................................................1235.9 DELETE文......................................................................................................................................................................................1235.10 HELP文.........................................................................................................................................................................................1235.11 HISTORY文..................................................................................................................................................................................1245.12 INFILE文.......................................................................................................................................................................................1245.13 INSERT文.....................................................................................................................................................................................1255.14 LOG文...........................................................................................................................................................................................1255.15 PRINT文........................................................................................................................................................................................1265.16 PRINT ENV文...............................................................................................................................................................................1275.17 PRINT STATISTICS文.................................................................................................................................................................1295.18 ROLLBACK文..............................................................................................................................................................................1305.19 SELECT文.....................................................................................................................................................................................1305.20 SET CATALOG文........................................................................................................................................................................1315.21 SET ROLE文.................................................................................................................................................................................1315.22 SET SCHEMA文...........................................................................................................................................................................1325.23 SET SESSION AUTHORIZATION文.........................................................................................................................................1325.24 SET STATISTICS文.....................................................................................................................................................................1325.25 SET TRANSACTION文...............................................................................................................................................................1345.26 SNAP文.........................................................................................................................................................................................1355.27 SQL TRACE文..............................................................................................................................................................................1355.28 UPDATE文....................................................................................................................................................................................136
索引......................................................................................................................................................................................138
- iv -
-
第1章 Symfoware/SQLTOOLの概要本章では、Symfoware/SQLTOOLの概要について説明します。
1.1 Symfoware/SQLTOOLの機能Symfoware/SQLTOOLの機能を以下に示します。
1.1.1 アプリケーションの開発支援機能Symfoware/SQLTOOLでは、アプリケーションの開発支援機能として、以下の機能を提供しています。
・ データベースの構築機能
・ データベースの操作機能
データベースの構築機能
Symfoware/SQLTOOLでは、データベースの構築に必要な一連の処理を実行することができます。データベースの構築機能を利用して実行できるSQL文を以下に示します。
また、データベース簡単運用の場合には、使用可能なSQL文の範囲が異なります。データベース簡単運用ガイドを参照し、使用可能なSQL文の範囲を確認してください。
- 1 -
-
機能名 実行可能なSQL文
データベース定義文・ CREATE DATABASE文
・ CREATE DBSPACE文
データベース操作文・ DROP DATABASE文
・ DROP DBSPACE文
スキーマ定義文
・ CREATE SCHEMA文
・ CREATE TABLE文
・ CREATE VIEW文
・ CREATE PROCEDURE文
・ CREATE FUNCTION文
・ CREATE INDEX文
・ CREATE TRIGGER文
・ CREATE SEQUENCE文
スキーマ操作文
・ DROP SCHEMA文
・ DROP TABLE文
・ ALTER TABLE文
・ DROP VIEW文
・ DROP PROCEDURE文
・ DROP INDEX文
・ DROP TRIGGER文
・ SWAP TABLE文
・ DROP SEQUENCE文
・ DROP FUNCTION文
格納構造定義文
・ CREATE DSO文
・ CREATE DSI文
・ CREATE SCOPE文
格納構造操作文
・ DROP DSO文
・ DROP DSI文
・ ALTER DSI文
・ DROP SCOPE文
・ APPLY SCOPE文
・ RELEASE SCOPE文
・ PRINT STATISTICS文
・ SET STATISTICS文
利用者制御文
・ CREATE USER文
・ DROP USER文
・ ALTER USER文
アクセス制御文 ・ CREATE ROLE文
- 2 -
-
機能名 実行可能なSQL文
・ DROP ROLE文
・ GRANT文
・ REVOKE文
・ SET ROLE文
システム制御文・ SET SYSTEM PARAMETER
文
データベースの操作機能
Symfoware/SQLTOOLでは、データベースを操作する機能を提供しています。データベースの操作機能を利用することで、以下の作業を行うことができます。
・ 作成したSQL文の実行検証
・ データベース内のデータ検索
・ データベース内のデータ更新
データベースの操作機能を利用して、対話的に実行できるSQL文を以下に示します。
機能名 実行可能なSQL文
データ操作文
・ SELECT文
・ INSERT文
・ UPDATE文
・ DELETE文
・ CALL文
トランザクション管理文
・ SET TRANSACTION文
・ COMMIT文
・ ROLLBACK文
セション管理文
・ SET CATALOG文
・ SET SCHEMA文
・ SET SESSIONAUTHORIZATION文
コネクション管理文 ・ CONNECT文
アクセス制御文 ・ SET ROLE文
1.1.2 データベースのチューニング機能Symfoware/SQLTOOLでは、データベースのチューニング機能として以下の機能を提供しています。
・ アクセスプランの取得
・ 性能情報の取得
・ 最適化情報の変更・表示
・ チューニング情報の変更・表示
- 3 -
-
アクセスプランの取得
作成したSQL文のアクセス手順を取得します。取得したアクセスプランにより、対象のSQL文が使用するインデックスおよび表の結合順などを知ることができ、データベースの設計どおりに、SQL文が動作しているかを検証することができます。
アクセスプランを取得するための制御文を以下に示します。
・ ACCESS PLAN文
性能情報の取得
SQL文実行時の資源使用情報を性能情報として取得します。この情報は、アクセスプランと比較し、SQLの動作を分析し、SQLの動作環境をチューニングする場合に利用します。
性能情報を取得するための制御文を以下に示します。
・ SQL TRACE文
・ SNAP文
最適化情報の変更・表示
データベースの最適化情報を変更・表示します。
最適化情報を表示・変更するための制御文を以下に示します。
・ SET STATISTICS文
・ PRINT STATISTICS文
注意
データベース簡単運用では、上記の制御文を使用した最適化情報の変更および表示はできません。データベース簡単
運用の場合には、rdbupsコマンドを使用して、最適化情報の変更を行ってください。
チューニング情報の変更・表示
実行中のSQL環境のチューニング情報を動的に変更します。また、チューニング情報を表示することもできます。
チューニング情報を変更・表示するための制御文を以下に示します。
・ CHANGE ENV文
・ PRINT ENV文
1.1.3 サービス機能Symfoware/SQLTOOLでは、サービス機能として以下の機能を提供しています。
・ ファイル出力指定
・ 列名表示
・ 表示幅制御
・ 結果表示制御
・ 対話型ファイル読込み
・ 実行履歴表示
・ 複数行指定
・ コマンドヘルプ
- 4 -
-
ファイル出力指定
SQL文の実行結果をファイルに取得します。
ファイル出力を指定するための制御文を以下に示します。
・ LOG文
列名表示
定義されている表の列名を表示します。
列名を表示するための制御文を以下に示します。
・ COLUMN文
表示幅制御
SQL文の実行結果の画面表示およびファイル出力への表示幅を制御します。
表示幅を制御するための制御文を以下に示します。
・ COLUMN FORMAT文
結果表示制御
SQL文の実行結果の画面表示を制御します。
結果表示を制御するための制御文を以下に示します。
・ PRINT文
対話型ファイル読込み
ファイル中のSQL文を順次表示しながら対話的に、そのSQL文を実行するかどうかを問い合わせます。
対話的にファイルを読み込むための制御文を以下に示します。
・ INFILE文
実行履歴表示
過去に実行したヒストリの表示、およびヒストリの実行を指定します。
実行履歴を表示するための制御文を以下に示します。
・ HISTORY文
複数行指定
プロシジャルーチン定義時の複数行指定を可能とします。
複数行指定するための制御文を以下に示します。
・ EXEC SQL文、END-EXEC文
コマンドヘルプ
rdbexecsqlコマンドの使用方法を画面に表示します。
コマンドヘルプを使用するための制御文を以下に示します。
・ HELP文
1.2 Symfoware/SQLTOOLの適用範囲Symfoware/SQLTOOLは、以下のデータベース開発業務に適用できます。
・ データベース構築時
- 5 -
-
・ アプリケーション開発時
・ 性能検証チューニング時
・ 業務への機能追加時
注意
データベース運用時の性能情報の取得については、SQL_SNAP、rdbpsコマンド、またはrdbsarコマンドを使用してください。
データベース構築時およびアプリケーション開発時
新規にデータベースの構築およびアプリケーションの開発を行う場合、以下のようにデータベースの構築および最適化
情報を設定します。
・ データベースの設計に基づきデータベースを構築します。
→ rdbexecsqlコマンドを利用して、データベースを構築します。
・ 将来的なデータベースの規模を予想し、最適化情報を設定します。
→ rdbexecsqlコマンドを利用して、最適化情報を設定します。
次にデータベースの設計どおりにSQL文が動作していることを確認します。設計どおりに動作していない場合は、チューニングを実施します。
・ アプリケーションを実行してアクセスプランを取得し、SQL文の動作を確認します。
→ 設計どおりに動作していない場合はチューニングを実施します。
- 6 -
-
・ アプリケーションの作成途中に、rdbexecsqlコマンドを利用してSQL文の動作を確認します。
→ 設計どおりに動作していない場合はチューニングを実施します。
性能検証のチューニング時
データベースの構築後、ある程度のデータを格納して運用テストを行い、性能検証をします。SQL_SNAP機能、ROUTINE_SNAP機能またはパフォーマンスモニタを利用して、性能の悪いSQL文を絞り込み、rdbexecsqlコマンドを利用してアクセスプランの取得とSQL性能情報を取得し、分析してチューニングを実施します。
また、データベースバッファのチューニング、デッドロックまたはトランザクション排他待ちの検証もここで実施します。
- 7 -
-
業務への機能追加時
運用中のデータベースに新しい業務を追加する場合、テスト環境にデータベースの定義を複写し、テスト環境において
データベースのチューニングを行います。テスト環境では、追加業務の検証に加えて、運用中の業務のアクセスプランも
合わせて検証し、運用中業務に影響がないことを確認します。その後、運用中環境にチューニング結果を反映し、新し
い業務を追加します。
- 8 -
-
第2章 Symfoware/SQLTOOLの使用方法本章では、Symfoware/SQLTOOLの使用方法について説明します。
2.1 環境設定Symfoware/SQLTOOLの環境設定について説明します。
・ 2.1.1 環境設定(Solaris/Linux)
・ 2.1.2 環境設定(Windows)
2.1.1 環境設定(Solaris/Linux)Symfoware/SQLTOOLを実行するために、以下の環境変数の設定が必要です。
・ 環境変数LD_LIBRARY_PATH
・ 環境変数RDBNAME
環境変数LD_LIBRARY_PATHの設定
環境変数“LD_LIBRARY_PATH”の設定例を以下に示します。
Solarisの場合
例1
Cシェルの場合
RDBライブラリの格納ディレクトリ:/opt/FSUNrdb2b/lib
setenv LD_LIBRARY_PATH /opt/FSUNrdb2b/lib:$LD_LIBRARY_PATH
例2
bash、Bシェル、Kシェルの場合
RDBライブラリの格納ディレクトリ:/opt/FSUNrdb2b/lib
LD_LIBRARY_PATH=/opt/FSUNrdb2b/lib:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH
Linuxの場合
例1
TCシェルの場合
RDBライブラリの格納ディレクトリ:/opt/FJSVrdb2b/lib
setenv LD_LIBRARY_PATH /opt/FJSVrdb2b/lib:$LD_LIBRARY_PATH
例2
bashの場合
RDBライブラリの格納ディレクトリ:/opt/FJSVrdb2b/lib
LD_LIBRARY_PATH=/opt/FJSVrdb2b/lib:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH
- 9 -
-
環境変数RDBNAMEの設定
環境変数“RDBNAME”の設定例を以下に示します。
rdbexecsqlコマンドまたはアプリケーションで処理を行う対象となるSymfoware/RDB環境のRDBシステム名を、環境変数“RDBNAME”に設定します。この環境変数は、ローカルアクセスの場合のみ有効となります。ただし、Symfoware/RDB環境にRDBシステム名をつけていない場合は、本設定は不要です。
例1
Cシェルの場合
RDBシステム名:rdbsys1
setenv RDBNAME rdbsys1
TCシェルの場合
RDBシステム名:rdbsys1
setenv RDBNAME rdbsys1
例2
bash、Bシェル、Kシェルの場合
RDBシステム名:rdbsys1
RDBNAME=rdbsys1 ; export RDBNAME
bashの場合
RDBシステム名:rdbsys1
RDBNAME=rdbsys1 ; export RDBNAME
2.1.2 環境設定(Windows)Symfoware/SQLTOOLを実行するために、以下の環境変数の設定が必要です。
・ 環境変数RDBNAME
・ 環境変数RDBCMDMSGEVENTLOG
環境変数RDBNAMEの設定
環境変数“RDBNAME”の設定例を以下に示します。
rdbexecsqlコマンドまたはアプリケーションで処理を行う対象となるSymfoware/RDB環境のRDBシステム名を、環境変数“RDBNAME”に設定します。この環境変数は、ローカルアクセスの場合のみ有効となります。ただし、Symfoware/RDB環境にRDBシステム名をつけていない場合は、本設定は不要です。
例
環境変数“RDBNAME”の設定を行う場合(RDBシステム名をrdbsys1とした場合)
set RDBNAME=rdbsys1
参照
クライアント用の動作環境ファイルを利用して、事前に動作環境のチューニングを行っている場合、環境変数“SQLRTENV”にクライアント用の動作環境ファイルを設定する必要があります。
- 10 -
-
上記の詳細については、“アプリケーション開発ガイド(埋込みSQL編)”を参照してください。
環境変数RDBCMDMSGEVENTLOGの設定
rdbexecsqlコマンド実行時に、コマンド実行者の対処が必要なqdgメッセージをイベントログへ出力するか否かを、環境変数“RDBCMDMSGEVENTLOG”で指定します。ただし、イベントログへのqdgメッセージ出力制御を行わない場合は、本設定は不要です。
以下の表に変数名と変数値を示します。
変数名 変数値 意味
RDBCMDMSGEVENTLOG(注)
YES RDBコマンド実行者の確認が必要なqdgメッセージをイベントログへ出力します。
NO RDBコマンド実行者の確認が必要なqdgメッセージをイベントログへ出力しません。
注) 環境変数を省略した場合は、YESを指定したとみなし、イベントログへRDBコマンド実行者の確認が必要なqdgメッセージを出力します。
例
環境変数“RDBCMDMSGEVENTLOG”の設定を行う場合(イベントログへのメッセージ出力制御を行う場合)
set RDBCMDMSGEVENTLOG=NO
参照
環境変数の設定方法の詳細については、“ヘルプとサポート”を参照してください。
2.2 rdbexecsqlコマンドからの利用データベースの構築中やアプリケーションの開発中に、SQL文の動作を1行ずつ確認したい場合に、rdbexecsqlコマンドを利用します。
rdbexecsqlコマンドは、アプリケーションと同じように動作環境ファイルや環境変数を読み込んでSQL文を実行します。
Symfoware/SQLTOOLをrdbexecsqlコマンドから利用する方法を説明します。
2.2.1 Symfoware/SQLTOOLの起動Symfoware/SQLTOOLをコマンドから利用する場合は、rdbexecsqlコマンドを実行します。
参照
rdbexecsqlコマンドの指定方法の詳細については、“コマンドリファレンス”を参照してください。
rdbexecsqlコマンドの利用方法
SQLサーバ名を指定して起動する
接続先のSQLサーバ名を指定してrdbexecsqlコマンドを実行します。指定されたSQLサーバ名を使用してCONNECT文が実行されます。
ローカルアクセスする場合は、SQLサーバ名としてデータベース名を指定します。
サーバへの接続が完了すると、コマンドを入力するためのプロンプトが表示されます。
- 11 -
-
例
データベースUSER_DBにローカルアクセスする場合
$ rdbexecsql -s USER_DB
SQL>
ユーザ名を指定して起動する
通常は、ツール起動時のユーザ名でサーバに結合します。このユーザ名は変更することができます。
Solaris/Linuxの場合
rdbexecsqlコマンド実行時にユーザ名を指定すると、パスワードの入力を要求するプロンプトが表示されます。指定したユーザ名とパスワードを使用して、CONNECT文が実行されます。
例
ユーザ名user01を指定して、データベースUSER_DBにローカルアクセスする場合
$ rdbexecsql -s USER_DB -u user01
Password:
SQL>
Windowsの場合
rdbexecsqlコマンド実行時にユーザ名を指定すると、パスワードの入力のダイアログボックスが表示されます。パスワードを入力し、OKボタンを押してください。
例
ユーザ名user01を指定して、データベースUSER_DBにローカルアクセスする場合
C:\>rdbexecsql -s USER_DB -u user01
ポイント
CONNECT文またはSESSION AUTHORIZATION文実行時に、パスワードを省略した場合も、パスワード入力ダイアログボックスが表示されます。
rdbexecsqlコマンドの利用形態
rdbexecsqlコマンドの利用形態には、以下の2つがあります。
・ 対話型
・ ファイル読込み
- 12 -
-
対話型
画面からSQL文や制御文を入力し、その結果を画面に出力します。
ファイル読込み
あらかじめ決められたSQL文を実行する場合には、実行するコマンド一覧を記述したファイルを作成しておき、rdbexecsqlコマンドの実行時にiオプションでこのファイルを指定します。この場合には、画面から入力するのではなく、ファイルから一行ずつコマンドを読み込みながら実行し、その結果を画面に出力します。ファイルの最後の行まで実行すると、
rdbexecsqlコマンドは自動的に終了します。
2.2.2 Symfoware/SQLTOOLの停止Symfoware/SQLTOOLを停止するには、QUITコマンドを実行します。入力を受け付けるプロンプトに対して、停止コマンドを実行することによって、rdbexecsqlコマンドを終了させることができます。rdbexecsqlコマンド終了時にはDISCONNECT文が実行されます。終了していないトランザクションが存在した場合には、内部的にROLLBACK文が実行された後にDISCONNECT文が実行されます。
例
Symfoware/SQLTOOLを停止する
SQL> QUIT
2.2.3 rdbexecsqlコマンドで扱うSQL文の範囲rdbexecsqlコマンドで扱うSQL文の範囲について説明します。
rdbexecsqlコマンドで扱うSQL文
rdbexecsqlコマンドで使用できるSQL文の範囲は以下のとおりです。
データベース簡単運用の場合には、使用可能なSQL文の範囲が異なります。データベース簡単運用ガイドを参照し、使用可能なSQL文の範囲を確認してください。
・ データベース定義文
・ データベース操作文
・ スキーマ定義文
・ スキーマ操作文
- 13 -
-
・ 格納構造定義文
・ 格納構造操作文
・ 利用者制御文
・ アクセス制御文
・ システム制御文
・ データ操作文
・ トランザクション管理文
・ セション管理文
・ コネクション管理文
ただし、以下の条件に該当するSQL文は使用できません。
利用者制御文の制限
利用者制御文のうち、以下のSQL文は使用できません。
- SET USER PASSWORD文
データ操作文の制限
SQL文の長さが32000バイトを超えるデータ操作文は使用できません。
コネクション管理文の制限
コネクション管理文のうち、以下のSQL文は使用できません。
- SET CONNECTION文
- DISCONNECT文
ホスト変数などの動的パラメタが記述されているSQL文
指定されたSQL文にホスト変数を記述した場合はエラーとなります。
指定できるSQL文についての詳細は、“第5章 制御文リファレンス”を参照してください。
カーソルを使用して更新するSQL文
SELECT文を指定すると、SQL文を被準備文としてPREPARE文、OPEN文、FETCH文、CLOSE文が自動的に実行されます。カーソルを使用して更新するSQL文は使用できません。
SELECT文の詳細については、“5.19 SELECT文”を参照してください。
注意
・ BLOBデータの場合、INSERT文およびUPDATE文は使用できません。
・ 接続中のデータベースは、DROP DATABASE文で削除できません。接続中のデータベースを削除する場合は、RDBII_DICTIONARYなどの別のデータベースに接続してから、DROP DATABASE文を実行してください。
2.2.4 文字コード系の指定rdbexecsqlコマンドで扱う文字コード系について説明します。
データベースに格納する文字情報は以下の文字コード系で使用できます。
・ EUCコード
・ シフトJISコード
・ UNICODE
ただし、本コマンドは常にSymfoware/RDBのロケールで動作します。
- 14 -
-
クライアント用の動作環境ファイルの実行パラメタ“NCHAR_CODE”について
rdbexecsqlコマンドは常にSymfoware/RDBのロケールで動作します。クライアント用の動作環境ファイルの実行パラメタ“NCHAR_CODE”の指定は無効になります。
参照
クライアント用の動作環境ファイルの詳細は、“アプリケーション開発ガイド(埋込みSQL編)”を参照してください。
2.2.5 出力形式rdbexecsqlコマンドでのSQL文実行結果の出力形式について説明します。
データの表示形式は、コマンド起動時のmoオプション指定により決まります。
表示形式には、以下の2種類があります。
・ バーティカル形式(moオプション指定なし)
・ 表形式(moオプション指定あり)
バーティカル形式の出力形式
rdbexecsqlコマンドの起動時にmoオプションを指定しない場合、SQL文の実行結果をバーティカル形式で出力します。
バーティカル形式のSQL文実行結果は以下の順で表示します。
・ 結果データ(SELECT文のみ)
・ Number of records(処理結果行数)
・ SQLSTATE
・ メッセージ
SELECT文での結果データは列名、検索値データを表示します。
SQL>SELECT INT_D FROM SCM1.TBL1
--------------------------------(1)
INT_D:1 --------------------------------(2)
Number of records:1 --------------------------------(3)
SQLSTATE:00000 --------------------------------(4)
SQLMSG:JYP2001I 正常に終了しました.-----------------------------(5)
(1) 結果データ(件数)を表示します。(注1)
(2) 結果データ(列名とデータ)を表示します。(注1)
(3) Number of records(処理結果行数)を表示します。(注2)
(4) SQLSTATEを表示します。
(5) メッセージを表示します。
注1) SELECT文のみ表示
注2) INSERT文、UPDATE文、またはDELETE文を実行した際に被トリガSQL文がINSERT文であるトリガが動作した場合、その処理結果行数も含まれます。
COUNT(*)、AVGなどのように結果の列の名前がない場合は、選択リストに指定した項目の順番を表示します。
SQL>SELECT COUNT(*) FROM SCM1.TBL1
1:1
Number of records:1
- 15 -
-
SQLSTATE:00000
SQLMSG:JYP2001I 正常に終了しました.
表形式の出力形式
rdbexecsqlコマンドの起動時にmoオプションを指定した場合、SQL文の実行結果を表形式で出力します。
表形式のSQL文実行結果は以下の順で表示します。
・ 結果データ(SELECT文のみ)
・ Number of records(処理結果行数)
・ メッセージ(異常時のみ)
SELECT文での結果データは列名、検索値データを表示します。
SQL>SELECT INT_D FROM SCM1.TBL1
INT_D --------------------------------(1)
-----------
1 --------------------------------(2)
Number of records:1 --------------------------------(3)
(1) 結果データ(列名)を表示します。(注1)
(2) 結果データ(データ)を表示します。(注1)
(3) Number of records(処理結果行数)を表示します。(注2)
注1) SELECT文のみ表示
注2) INSERT文、UPDATE文、またはDELETE文を実行した際に被トリガSQL文がINSERT文であるトリガが動作した場合、その処理結果行数も含まれます。
COUNT(*)、AVGなどのように結果の列の名前がない場合は、選択リストに指定した項目の順番を表示します。
SQL>SELECT COUNT(*) FROM SCM1.TBL1
1
-----------
1
Number of records:1
2.2.6 データの表示形式rdbexecsqlコマンドでのデータの表示形式について説明します。
なお、以下の例は、基本的に、出力形式としてバーティカル形式を選択した場合の例になっています。BLOBの場合のみ、表形式の出力例も示しています。
表示データ長
数値データおよび日時データは、結果属性の有効データで表示します。文字データおよびBLOBデータは、COLUMNFORMAT文で指定した長さに従います。
COLUMN FORMAT文に指定できる値と省略値を、“表2.1 データ表示範囲”に示します。
表2.1 データ表示範囲
データ型 最小値 最大値バーティカル形
式の省略値
表形式の省
略値
CHARVCHAR
1 32000(注) 100 10
- 16 -
-
データ型 最小値 最大値バーティカル形
式の省略値
表形式の省
略値
NCHARNCHARVARYING
2 32000(注) 100 10
BLOB 12147483647(注)
1024 10
注)表形式のデータ表示では、1行80バイトで自動的に改行されます。
参照
データ型についての詳細は、“SQLリファレンス”を参照してください。
CHAR/CHARACTER(文字列型のデータ型:固定長)
例
表示させたい長さを指定して表示します。(8バイト分表示)
SQL>COLUMN FORMAT CHARMAX 8
SQL>SELECT CHAR_D FROM SCM1.TBL1
CHAR_D:あいうえ
VCHAR/VARYING CHARACTER(文字列型のデータ型:可変長)
例
表示させたい長さを指定して表示します。(10バイト分表示)
SQL>COLUMN FORMAT CHARMAX 10
SQL>SELECT VCHAR_D FROM SCM1.TBL1
VCHAR_D:あいうえお
NCHAR/NATIONAL CHAR(各国語文字列型のデータ型:固定長)
例
表示させたい長さを指定して表示します。(10バイト分表示)
SQL>COLUMN FORMAT NCHARMAX 10
SQL>SELECT NCHAR_D FROM SCM1.TBL1
NCHAR_D:あいうえお
NCHAR VARYING/NATIONAL VCHAR(各国語文字列型のデータ型:可変長)
例
表示させたい長さを指定して表示します。(12バイト分表示)
SQL>COLUMN FORMAT NCHARMAX 12
SQL>SELECT NVCHAR_D FROM SCM1.TBL1
NVCHAR_D:あいうえおか
DECIMAL(真数型のデータ型、10進の精度と位取りを持つ)
定義時の精度および位取りに基づいて表示します。
- 17 -
-
例
DECIMAL(9,3)
SQL>SELECT DECIMAL_D FROM SCM1.TBL1
DECIMAL_D:+123456.789
DECIMAL_D:-000123.400
NUMERIC(真数型のデータ型、10進の精度と位取りを持つ)
定義時の精度および位取りに基づいて表示します。
例
NUMERIC(9,3)
SQL>SELECT NUMERIC_D FROM SCM1.TBL1
NUMERIC_D:+123456.789
NUMERIC_D:-000123.400
INTEGER(真数型のデータ型、2進の精度を持つ:精度31)またはSMALLINT(真数型のデータ型、2進の精度を持つ:精度15)
SQL>SELECT INT_D,SMALLINT_D FROM SCM1.TBL1
INT_D :1
SMALLINT_D:1
INT_D :-2
SMALLINT_D:-2
DATE,TIME,TIMESTAMP(日時型のデータ型)
SELECT DATE_D,TIME_D,TIMESTAMP_D FROM SCM1.TBL1
DATE_D :2000-01-01
TIME_D :12:00:00
TIMESTAMP_D:2000-01-01 12:00:00
INTERVAL(時間隔型のデータ型)
例
INTERVAL_D INTERVAL YEAR(4) TO MONTH
SQL>SELECT INTERVAL_D FROM SCM1.TBL1
INTERVAL_D:0000-01
BLOB(BLOB型のデータ型:バイナリ属性のデータを格納可能)
例1
BLOBデータをバーティカル形式で先頭から64バイト表示します。
格納されているBLOBデータの長さを示す8バイト分のデータが、先頭に表示されます。
SQL>COLUMN FORMAT BLOBMAX 64
SQL>SELECT BLOB_D FROM SCM1.TBL1
BLOB_D:45ea0: 00000000 000003e8 41414141 41414141: ........AAAAAAAA
- 18 -
-
45eb0: 41414141 41414141 41414141 41414141: AAAAAAAAAAAAAAAA
45ec0: 41414141 41414141 41414141 41414141: AAAAAAAAAAAAAAAA
45ed0: 41414141 41414141 41414141 41414141: AAAAAAAAAAAAAAAA
例2
BLOBデータを表形式で先頭から64バイト表示します。
SQL>COLUMN FORMAT BLOBMAX 64
SQL>SELECT BLOB_D FROM SCM1.TBL1
BLOB_D
--------------------------------------------------------------------------------
--------------------------------
41414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141
CLOB(CLOB型のデータ型)
例
CLOBデータを先頭から64バイト表示します。
SQL>COLUMN FORMAT CLOBMAX 64
SQL>SELECT CLOB_D FROM SCM1.TBL1
CLOB_D:あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみ
ROW_ID
例
バイナリデータとして表示します。
SQL>SELECT ROW_ID FROM SCM1.TBL1
ROW_ID:0000000e-0000000f-00000002-00020000-0000006f-00000000
FLOAT(概数型のデータ型:精度1~23 REAL、24~52 DOUBLE PRECISION)、 REAL(概数型のデータ型:精度23)またはDOUBLE PRECISION(概数型のデータ型:精度52)
SQL>SELECT FLOAT_D,REAL_D,DPRE_D FROM SCM1.TBL1
FLOAT_D:1.000000E+04
REAL_D :1.234568E+09
DPRE_D :1.234568E+09
NULL値
結果データがNULL値だった場合は “(NULL)”を表示します。
SQL>SELECT INT_D,SMALLINT_D FROM SCM1.TBL1
INT_D :1
SMALLINT_D:(NULL)
2.2.7 トランザクション制御rdbexecsqlコマンドのトランザクション制御は、起動時のcオプションの指定により異なります。
cオプションを指定した場合、通常のアプリケーションと同様にトランザクション制御用のSQL文に従って、トランザクションは制御されます。
cオプションを省略した場合、データ操作のSQL文の実行が正常終了するごとに、自動的にCOMMIT処理が行われます。
- 19 -
-
クライアント用の動作環境ファイルの実行パラメタ“TRAN_SPEC”について
rdbexecsqlコマンドを実行するときは、クライアント用の動作環境ファイルに“TRAN_SPEC”の指定があっても、クライアント用の動作環境ファイルの指定は無視されます。
トランザクションモードについて
rdbexecsqlコマンドの独立性水準の省略値は、READ UNCOMMITTEDで動作します。SET TRANSACTION文を実行した場合、SET TRANSACTION文の指定に従います。ただし、動作環境ファイルにDSO_LOCKを指定している場合、SERIALIZABLEで動作します。
参考
データベース簡単運用の場合、動作環境ファイルでDSO_LOCKの指定はできません。
rdbexecsqlコマンドを実行する場合は、クライアント用の動作環境ファイルのDEFAULT_ISOLATIONで指定した独立性水準の変更は無視されます。
rdbexecsqlコマンドでSQL文を実行して、SQL文がエラーになったとき、そのトランザクションはロールバックされます。rdbexecsql起動時にcオプションが指定されている場合も指定されていない場合も、SQLエラーとなったトランザクションはロールバックされます。cオプションとロールバックの関係は以下のとおりです。
・ cオプションを指定していない場合SQL文ごとにトランザクションが開始、終了するので、SQLエラー時はそのエラーとなったSQL文のみがロールバックされます。
・ cオプションを指定している場合トランザクション制御文(COMMIT文、ROLLBACK文)でトランザクションが制御されます。したがって、SQLエラー時は、エラーとなったSQL文のトランザクションがロールバックされます。
rdbexecsql起動時にiオプションでSQL文を記載した入力ファイルを指定することができます。この入力ファイルに複数のSQL文が記載される場合、次のように動作します。
入力ファイルに記載されるSQL文は、1行目から最後のSQL文まで順に実行されます。SQL文の実行でエラーとなった場合は、そのトランザクションはロールバックされ、次のSQL文より新たにトランザクションが開始され実行されます。cオプションとロールバックの関係は以下のとおりです。
・ cオプションを指定していない場合SQL文ごとにトランザクションが開始、終了するので、SQLエラー時はそのエラーとなったSQL文のみがロールバックされます。
・ cオプションを指定している場合トランザクション制御文(COMMIT文、ROLLBACK文)でトランザクションが制御されます。したがって、SQLエラー時は、エラーとなったSQL文のトランザクションがロールバックされます。
注意
トランザクション制御文によりトランザクションを終了させないでrdbexecsqlコマンドを終了させた場合、継続していたトランザクションはロールバックされます。
また、rdbexecsqlコマンドでトランザクションが継続中の場合、資源が占有され他のデータベースアクセスアプリケーションと資源排他が発生し動作に支障をきたす状況が起きるので、トランザクションの扱いには十分注意してください。
参照
トランザクション制御についての詳細は、“アプリケーション開発ガイド(共通編)”の“トランザクションと排他制御”を参照
してください。
- 20 -
-
また、データベース簡単運用でのトランザクション制御についての詳細は、“アプリケーション開発ガイド(共通編)”の“トランザクションと排他制御(データベース簡単運用の場合)”を参照してください。
2.2.8 複数行指定rdbexecsqlコマンドにおいて、SQL先頭子(EXEC SQL)およびSQL終了子(END-EXEC)を使用することで、プロシジャルーチン定義時の複数行指定が可能です。
“EXEC SQL”から“END-EXEC”までの範囲が、1文として扱われます。
複数行指定を、対話型で使用した例と、INFILE文を利用して入力ファイルに指定した例を以下に示します。
対話型で使用時の指定
$ rdbexecsql -d
SQL>EXEC SQL
2 CREATE PROCEDURE STOCKS.PROC001 ( IN KEY1 INTEGER )
3 BEGIN
4 DECLARE 在庫数量変数 INTEGER
5 SELECT 在庫数量 INTO 在庫数量変数 FROM STOCKS.在庫表
:
10 END
11 END-EXEC
:
INFILEで使用時の指定
入力ファイル(createproc.sql)の作成
-- プロシジャを定義
EXEC SQL
CREATE PROCEDURE STOCKS.PROC001 ( IN KEY1 INTEGER )
COMMENT '在庫不足の製品の発注依頼'
BEGIN
DECLARE 在庫数量変数 INTEGER;
SELECT 在庫数量 INTO 在庫数量変数 FROM STOCKS.在庫表;
END
END-EXEC;
INFILE文の指定
$ rdbexecsql -d
SQL>INFILE /home/user/createproc.sql
EXEC SQL
CREATE PROCEDURE STOCKS.PROC001 ( IN KEY1 INTEGER )
BEGIN
DECLARE 在庫数量変数 INTEGER
SELECT 在庫数量 INTO 在庫数量変数 FROM STOCKS.在庫表
END
END-EXEC
SQL>EXECUTE?(y|n|q)=>
注意
・ SQL先頭子(EXEC SQL)の“EXEC”と“SQL”は同一行に記述する必要があります。
・ SQL先頭子(EXEC SQL)を記述した行にはコメント以外の文字列を記述することはできません。
- 21 -
-
2.2.9 引数による可変要素の指定rdbexecsqlコマンドの起動時にiオプションを指定した場合、入力ファイル内に記述するSQL文の一部を可変要素として定義し、コマンドに引数を指定して、実行時にSQL文を補完することができます。
入力ファイルの記述方法およびコマンドの指定方法は以下のとおりです。
入力ファイルの記述方法
SQL文に、可変要素を“&1”、“&2”、…“&n”の形式で指定します。
“&n”には、コマンドの引数でn番目に指定された値が代入されます。
例
データベーススペースの作成先ローデバイス名を可変要素“&1”に、スキーマ名を可変要素“&2”に設定する例を以下に示します。
createdb.sql
-- データベーススペース定義 データベーススペース名は“DBSPACE1”
-- ローデバイス名は1番目の引数
CREATE DBSPACE DBSPACE1 ALLOCATE RAWDEVICE &1;
-- スキーマを定義 スキーマ名は2番目の引数
CREATE SCHEMA &2
-- テーブルを定義
CREATE TABLE 在庫表 ( 製品番号 SMALLINT NOT NULL,
製品名 NATIONAL CHARACTER(10) NOT NULL,
在庫数量 INTEGER,
倉庫番号 SMALLINT,
PRIMARY KEY (製品番号)
)
コマンドの指定方法
ファイル名の後に可変要素に代入する値を引数として指定します。
1番目の引数が、入力ファイル内に“&1”で指定した値を補完、2番目の引数が“&2”で指定した値を補完、n番目の引数が“&n”で指定した値を補完します。
例
データベーススペースの作成先ローデバイス名に“/dev/rdsk/c0t1d0s1”に、スキーマ名に“STOCKS”を設定する例を以下に示します。
$ rdbexecsql -i /home/usr/createdb.sql /dev/rdsk/c0t1d0s1 STOCKS
INFILEコマンドへの指定方法
対話型実行時のINFILEコマンドによるファイル読み込み時にも、ファイル名の後に可変要素に代入する値を引数として指定できます。
1番目の引数が、入力ファイル内に“&1”で指定した値を補完、2番目の引数が“&2”で指定した値を補完、n番目の引数が“&n”で指定した値を補完します。
例
データベーススペースの作成先ローデバイス名に“/dev/rdsk/c0t1d0s1”に、スキーマ名に“STOCKS”を設定する例を以下に示します。
$ rdbexecsql -d
SQL>INFILE /home/usr/createdb.sql /dev/rdsk/c0t1d0s1 STOCKS
:
- 22 -
-
注意
可変要素を指定する場合は、“-”で始まる値を引数に指定することはできません。
2.2.10 SQL文でのエラー発生時の対処データベースの構築時に、rdbexecsqlコマンドにeオプションまたはexオプションを指定することにより、入力したSQL文の実行中にエラーが発生した場合に処理を中断し、SQL文でエラーが発生したことを表す値を返却します。
これにより、rdbexecsqlコマンドでエラーが発生した場合に、エラー内容によって利用者が処理を切り分けることが可能です。
eオプションを指定した場合、SQL文の実行中にエラーが発生すると、エラーの種類に関わらず処理が中断されます。
exオプションを指定した場合、未定義オブジェクトの削除エラー、定義済みオブジェクトの重複定義エラーまたは一意性制約違反のエラーが発生した場合は正常終了とみなされ、処理は継続されます。このため、データベースを一括して再
定義する場合に、重複定義エラーや未定義エラーを抑止し、次の定義文へ処理を継続させることが可能となります。
以下にrdbexecsqlコマンドにexオプションを指定して、シェルスクリプトを利用してデータベースを構築する例(UNIX系の場合)を示します。
処理の概要は以下のとおりです。
1. データベースの構築rdbexecsqlコマンドにiオプションを指定し、データベースの構築用のDDLファイルを読み込ませることにより、データベースの構築を行います。 その際、エラー発生時に備えて、標準出力をテキストファイルに出力しておきます。
データベースの構築では、メモリ不足などのエラーが発生して、データベースの構築を再実行するときに、初期
- 23 -
-
データが重複して挿入されてしまうことを防ぐために、はじめに格納構造の削除を行います。すべての表にPRIMARYKEYを定義する場合は、初期データの重複は発生しないため、格納構造の削除は必要ありません。
2. データベースの構築の成否判定rdbexecsqlコマンドの終了ステータスを取得することにより、データベースの構築が成功したか否かを判定します。
3. エラー内容の確認rdbexecsqlコマンドの標準出力の最終行にエラーメッセージが出力されていますので、エラーの内容を確認します。
4. エラーに対する対処の選択データベースの構築を中断するか、エラーの原因を取り除いてデータベースの構築を再実行するかを選択しま
す。
5. 不要な資源の削除データベースの構築を中断する場合、rdbexecsqlコマンドにiオプションを指定し、データベースの削除用のDDLファイルを読み込ませることにより、不要な資源の削除を行います。
データベースを構築するシェルスクリプトの例(bashの場合)
#!/bin/bash
# セットアップ開始
INPUT=Y
while [ "$INPUT" = "Y" ]
do
rdbexecsql -s RDBDB -i /home/user/createdb.dat -ex > dbsetuplog.txt 2>&1
if [ $? -eq 0 ]
then
echo "データベースの作成が完了しました。"
exit
else
echo "データベースの作成でエラーが発生しました。"
echo "再実行する場合は以下のメッセージの対処を実行してからYキーを入力してください。"
echo "データベースの作成を中断する場合はY以外のキーを入力してください。"
# エラーメッセージを表示
echo "エラー内容"
tail -1 dbsetuplog.txt
# ユーザからの入力を読み込み
read INPUT
fi
done
# セットアップの中断
echo "セットアップを中断します。"
echo "データベースを削除します。"
rdbexecsql -s RDBDB -i /home/user/dropdb.dat -ex >> dbsetuplog.txt 2>&1
if [ $? -eq 0 ]
then
echo "データベースの削除が完了しました。"
else
echo "データベースの削除でエラーが発生しました。"
# エラーメッセージを表示
echo "エラー内容"
tail -1 dbsetuplog.txt
# データベースの資源の回収処理
fi
- 24 -
-
データベースの構築に使用するDDLファイル(createdb.dat)の例
-- データベース名の登録 データベース名は“RDBDB”
CREATE DATABASE RDBDB;
-- データベーススペースの作成 DDLの実行
-- データベーススペース定義 データベーススペース名は“DBSPACE1”
CREATE DBSPACE DBSPACE1 ALLOCATE FILE /home/rdbdps/DBSPACE1 ATTRIBUTE SPACE (100M);
-- 論理構造の定義
-- スキーマを定義 スキーマ名は“STOCKS”
CREATE SCHEMA STOCKS;
-- テーブルを定義
CREATE TABLE STOCKS.在庫表 ( 製品番号 SMALLINT NOT NULL,
製品名 NATIONAL CHARACTER(10) NOT NULL,
在庫数量 INTEGER,
倉庫番号 SMALLINT,
PRIMARY KEY (製品番号)
);
CREATE TABLE STOCKS.アンケート (回答 CHARACTER VARYING(100));
CREATE VIEW STOCKS.大量在庫表(品番,数量)
AS SELECT 製品番号, 在庫数量 FROM STOCKS.在庫表
WHERE 在庫数量 >= 50;
-- 格納構造の定義
CREATE DSO 在庫表DSO
FROM STOCKS.在庫表
TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1));
CREATE DSO アンケートDSO
FROM STOCKS.アンケート
TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1));
-- DSIの定義の削除
DROP DSI 製品番号IXDSI;
DROP DSI 在庫表DSI;
DROP DSI アンケートDSI;
-- DSIのフォーマット指定
CREATE DSI 在庫表DSI
DSO 在庫表DSO
ALLOCATE DATA ON DBSPACE1 SIZE 280K,
FORMAT;
CREATE DSI アンケートDSI
DSO アンケートDSO
ALLOCATE DATA ON DBSPACE1 SIZE 280K,
FORMAT;
-- インデックスのDSO
CREATE DSO 製品番号IXDSO
INDEX ON STOCKS.在庫表 (製品番号)
TYPE BTREE ( PAGESIZE1(16),PAGESIZE2(1), REALIGNMENT) BY ADDRESS;
-- インデックスのDSI
-- DSIのフォーマット指定
CREATE DSI 製品番号IXDSI
INDEX
DSO 製品番号IXDSO
ALLOCATE BASE ON DBSPACE1 SIZE 200K,
INDEX ON DBSPACE1 SIZE 40K,
FORMAT;
-- その他の定義
- 25 -
-
-- プロシジャを定義
EXEC SQL
CREATE PROCEDURE STOCKS.PROC001 ( IN KEY1 INTEGER )
COMMENT '在庫不足の製品の発注依頼'
BEGIN
DECLARE 在庫数量変数 INTEGER;
SELECT 在庫数量 INTO 在庫数量変数 FROM STOCKS.在庫表;
END
END-EXEC;
-- データベースの創成 DMLの実行
-- データのINSERT
INSERT INTO STOCKS.在庫表 (製品番号,製品名,在庫数量,倉庫番号) VALUES (110,N'テレビ',86,2);
INSERT INTO STOCKS.在庫表 (製品番号,製品名,在庫数量,倉庫番号) VALUES (112,N'ビデオ',95,3);
INSERT INTO STOCKS.アンケート (回答) VALUES('回答のサンプルです');
データベースの削除に使用するDDLファイル(dropdb.dat)の例
-- その他の定義の削除
-- プロシジャを削除
DROP PROCEDURE STOCKS.PROC001;
-- 格納構造の定義の削除
DROP DSI 製品番号IXDSI;
DROP DSO 製品番号IXDSO;
DROP DSI アンケートDSI;
DROP DSI 在庫表DSI;
DROP DSO アンケートDSO;
DROP DSO 在庫表DSO;
-- テーブル定義の削除
DROP VIEW STOCKS.大量在庫表;
DROP TABLE STOCKS.アンケート;
DROP TABLE STOCKS.在庫表;
-- スキーマ定義の削除 スキーマ名は"STOCKS"
DROP SCHEMA STOCKS;
-- データベーススペース定義の削除 データベーススペース名は"DBSPACE1"
DROP DBSPACE DBSPACE1;
-- データベースの削除 データベース名は"RDBDB"
CONNECT TO 'RDBII_DICTIONARY';
DROP DATABASE RDBDB;
2.2.11 rdbexecsqlコマンドの排他についてアプリケーションおよびRDBコマンド間の排他の関係において、rdbexecsqlコマンドの排他は、アプリケーションと同等に扱われます。アプリケーションおよびRDBコマンド間の排他とは、データベースの同一資源に対して、アプリケーションおよびRDBコマンドが同時に動作した場合に、それぞれの処理を矛盾なく実行するために、Symfoware/RDBが制御する処理をいいます。
参照
アプリケーションの排他の詳細は、“アプリケーション開発ガイド(共通編)”を参照してください。
- 26 -
-
2.2.12 出力メッセージと対処rdbexecsqlコマンドの出力メッセージと対処方法について説明します。
出力メッセージ
rdbexecsqlコマンドでは、以下のメッセージが出力されます。
・ 正常終了時に出力するメッセージ
・ rdbexecsqlコマンドによる起動時のエラーメッセージ
・ SQL文実行時のエラーメッセージ
正常終了時に出力するメッセージ
例
SQL文実行時に出力されるメッセージ
JYP2083I SQL文によって処理を行った行数が0です.
JYP2001I 正常に終了しました.
rdbexecsqlコマンドによる起動時のエラーメッセージ
例1
不当オプションを指定した場合に出力されるエラーメッセージ
$ rdbexecsql -i
rdb: ERROR: qdg02208u:-iオプションの引数が正しく記述されていません
(システム名=rdbsys1)
rdb: ERROR: qdg02201u:rdbexecsqlが異常終了しました 復帰コード 01 (
システム名=rdbsys1)
$
例2
Symfoware/RDBが未起動の場合に出力されるエラーメッセージ
$ rdbexecsql -s USER_DB
rdb: ERROR: qdg13147u:rdbexecsqlコマンドの実行中にエラーを検出しま
した 詳細メッセージ='JYP5031E RDBIIシステムが未起動です.' (システ
ム名=rdbsys1)
$ rdbexecsql
rdb: ERROR: qdg02201u:rdbexecsqlが異常終了しました 復帰コード 01 (
システム名=rdbsys1)
SQL文実行時のエラーメッセージ
例1
SQL文実行時にサーバからエラーが返却された場合のエラーメッセージ
$ rdbexecsql -s USER_DB
SQL>SELECT * FROM SCM2.TBL1
rdb: ERROR: qdg13063u:rdbexecsqlコマンドが発行するSQL文でエラーが
発生しました SQL文=PREPARE SQLSTATE=37000 SQLMSG=JYP7201E スキーマ
“SCM2”が存在しません. (システム名=rdbsys1)
SQL>
例2
SQL文で文法エラーが発生した場合のエラーメッセージ
- 27 -
-
$ rdbexecsql -s USER_DB
SQL>SELECT * SCM1.TBL1
rdb: ERROR: qdg13063u:rdbexecsqlコマンドが発行するSQL文でエラーが
発生しました SQL文=PREPARE SQLSTATE=37000 SQLMSG=JYP8399E “TBL1
の前後にキーワード“FROM”が指定されていません. (システム名=rdbs
ys1)
SQL>
例3
rdbexecsqlコマンド内でメモリ不足が発生した場合のエラーメッセージ
SQL>SELECT * FROM SCM1.TBL1
rdb: ERROR: qdg02882u:メモリ不足が発生しました (システム名=rdbsys1)
rdb: ERROR: qdg02201u:rdbexecsqlが異常終了しました 復帰コード 01 (
システム名=rdbsys1)
メッセージの対処
参照
Solaris/Linuxの場合rdbexecsqlコマンドで出力するメッセージに対する利用者の対処は、“メッセージ集”、またはrdbprtmsgコマンドで参照することができます。
Windowsの場合rdbexecsqlコマンドで出力するメッセージに対する利用者の対処は、 “メッセージ集”で参照することができます。
rdbexecsqlコマンドの実行時のエラーメッセージの対処
例
rdbexecsqlコマンドの実行で出力されるメッセージ“qdg02208u”の説明を表示します。
$ rdbprtmsg -qdg 02208
qdg02208u
-s*オプションの引数が正しく記述されていません t*
[メッセージの意味]
オプションの引数が正しく記述されていません。
[パラメタの意味]
s*: オプション
t*: RDBシステム名
RDBシステム名はマルチRDBの場合のみ出力されます。
[システムの処理]
このコマンドの処理を中止します。
[利用者の処置]
オプションに対する引数を正しく指定して、再実行してください。
SQL文実行時のエラーメッセージの対処
例
SQL文の実行で出力されるメッセージ“JYP7201E”の説明を表示します。
$ rdbprtmsg -jyp 7201
JYP7201E
スキーマ“@1@”が存在しません.
[状態コード]
37000
[メッセージの意味]
スキーマ“@1@”が存在しません。
- 28 -
-
例: SELECT C11 FROM SCM1.T1
注) スキーマ名SCM1は利用環境中に存在しないとします。
[パラメタの意味]
@1@: スキーマ名
[システムの処理]
この文の処理を中止します。
[利用者の処置]
存在するスキーマを指定してください。
2.2.13 処理を中断する場合SQL実行中にrdbexecsqlコマンドを強制停止する方法には、以下があります。
rdbexecsqlコマンド処理中に[Ctrl]+[C]を押す
rdbexecsqlコマンド実行中に標準入力よりコマンドプロセスに対して[Ctrl]+[C]を押します。(rdbexecsqlコマンドプロセスに対してシグナルが発行されます。)
シグナル受け付け後、トランザクションはロールバックされ、コネクションが切断されてrdbexecsqlコマンドが終了します。
2.3 アプリケーションからの利用アプリケーション全体で、データベースへのアクセスや性能に問題がないかを確認する場合は、アプリケーションを実行
し、以下の情報を取得します。
・ アクセスプラン
・ 性能情報
アプリケーションを実行して、アクセスプランまたは性能情報を取得するには、クライアント用の動作環境ファイルに以下
のパラメタを指定してください。
・ ACCESS_PLAN
・ SQL_TRACE
実行パラメタの詳細については、“4.2.2 アプリケーションからアクセスプランを取得する”および“4.3.3 アプリケーションからSQL性能情報を取得する”を参照してください。
- 29 -
-
第3章 アプリケーション開発を支援する本章では、Symfoware/SQLTOOLで、アプリケーション開発を支援する機能について説明します。アプリケーション開発を支援する機能には以下の2つがあります。
・ データベースを構築する
・ データベースを操作する
3.1 データベースを構築するSymfoware/SQLTOOLでは、データベース構築のためのSQL文をrdbexecsqlコマンドで実行できます。
参考
データベース簡単運用では、“データベーススペースの作成”および“格納構造定義”は、不要です。
データベースの構築は、以下の手順で実施します。
以下にファイル指定でデータベースを構築する場合の例を示します。
例
データベース構築に使用する入力ファイルの内容
-- データベース名の登録 データベース名は“RDBDB”
CREATE DATABASE RDBDB;
-- データベーススペースの作成 DDLの実行
-- データベーススペース定義 データベーススペース名は“DBSPACE1”
CREATE DBSPACE DBSPACE1 ALLOCATE FILE /RDB2/DBS01 ATTRIBUTE SPACE(2M);
-- 論理構造の定義
- 30 -
-
-- スキーマを定義 スキーマ名は“STOCKS”
CREATE SCHEMA STOCKS;
-- テーブルを定義
CREATE TABLE STOCKS.在庫表 ( 製品番号 SMALLINT NOT NULL,
製品名 NATIONAL CHARACTER(10) NOT NULL,
在庫数量 INTEGER,
倉庫番号 SMALLINT,
PRIMARY KEY (製品番号)
);
CREATE VIEW STOCKS.大量在庫表(品番,数量)
AS SELECT 製品番号, 在庫数量 FROM STOCKS.在庫表
WHERE 在庫数量 >= 50;
-- 格納構造の定義
-- 在庫表のDSO
CREATE DSO 在庫表DSO
FROM STOCKS.在庫表
TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1));
-- 在庫表のDSI
-- DSIのフォーマット指定
CREATE DSI 在庫表DSI
DSO 在庫表DSO
ALLOCATE DATA ON DBSPACE1 SIZE 280K,
FORMAT;
-- インデックスのDSO
CREATE DSO 製品番号IXDSO
INDEX ON STOCKS.在庫表 (製品番号)
TYPE BTREE ( PAGESIZE1(16),PAGESIZE2(1), REALIGNMENT) BY ADDRESS;
-- インデックスのDSI
-- DSIのフォーマット指定
CREATE DSI 製品番号IXDSI
INDEX
DSO 製品番号IXDSO
ALLOCATE BASE ON DBSPACE1 SIZE 200K,
INDEX ON DBSPACE1 SIZE 40K,
FORMAT;
-- その他の定義
-- プロシジャを定義
EXEC SQL
CREATE PROCEDURE STOCKS.PROC001 ( IN KEY1 INTEGER )
COMMENT '在庫不足の製品の発注依頼'
BEGIN
DECLARE 在庫数量変数 INTEGER;
SELECT 在庫数量 INTO 在庫数量変数 FROM STOCKS.在庫表;
:
END
END-EXEC;
-- データベースの創成 DMLの実行
-- データのINSERT
INSERT INTO STOCKS.在庫表 (製品番号,製品名,在庫数量,倉庫番号)
VALUES (110,N'テレビ',86,2);
INSERT INTO STOCKS.在庫表 (製品番号,製品名,在庫数量,倉庫番号)
VALUES (112,N'ビデオ',95,3);
rdbexecsqlコマンドの指定例
$ rdbexecsql -s RDBDB -i /home/user/createdb.dat
- 31 -
-
3.2 データベースを操作するSymfoware/SQLTOOLでは、データベース操作のためのSQL文をrdbexecsqlコマンドで実行できます。
SQL文の設計時に、このコマンドを使ってSQL文を1行ずつ実行することにより、SQL文の実行検証を行うことができます。これにより、アプリケーション開発時にSQL文の記述を何度も修正し、そのたびにコンパイル、リンク、実行を繰り返す必要がなくなり、効率的なアプリケーション開発を支援します。
以下に、rdbexecsqlコマンドを利用したSQL文の実行検証例を示します。
格納されているデータの確認を行う
例1
格納されているデータ数について調べ、対話的に結果を確認する
$ rdbexecsql -s USER_DB -mo
SQL>SELECT COUNT(*) FROM SCM1.TBL1
1
----
100
Number of records:1
例2
格納されているデータの内容をファイル(/tmp/out_data)に出力する(1)
$ rdbexecsql -s USER_DB -o /tmp/out_data -mo
SQL>PRINT OFF
SQL>SELECT * FROM SCM1.TBL1
Number of records:3
[ファイル(/tmp/out_data)の出力結果]
SELECT * FROM SCM1.TBL1
INT_D SMALLINT_D CHAR_D
----- ---------- ----------
1 1 あいうえお
2 1 あいうえお
3 1 あいうえお
Number of records:3
例3
格納されているデータの内容をファイル(/tmp/out_data)に出力する(2)
$ rdbexecsql -s USER_DB -mo
SQL>PRINT OFF
SQL>LOG ON /tmp/out_data
SQL>SELECT * FROM SCM1.TBL1
Number of records:3
SQL>LOG OFF
[ファイル(/tmp/out_data)の出力結果]
SELECT * FROM SCM1.TBL1
INT_D SMALLINT_D CHAR_D
----- ---------- ----------
1 1 あいうえお
2 1 あいうえお
3 1 あいうえお
Number of records:3
例4
出力するデータの長さを指定する
- 32 -
-
CHARデータ、NCHARデータおよびBLOBデータの出力データ長を変更して出力します。(CHAR/VCHAR,NCHAR/NVCHARは先頭より10バイト、BLOBは先頭より64バイト)
$ rdbexecsql -s USER_DB -o /tmp/out_data -mo
SQL>PRINT OFF
SQL>COLUMN FORMAT CHARMAX 10
SQL>COLUMN FORMAT NCHARMAX 10
SQL>COLUMN FORMAT BLOBMAX 64
SQL>SELECT * FROM SCM1.TBL1
Number of records:1
[ファイル(/tmp/out_data)の出力結果]
SELECT * FROM SCM1.TBL1
INT_D SMALLINT_D CHAR_D BLOB_D
----- ---------- ---------- --------------------------------------------------・・・
1 1 あいうえお 41414141414141414141414141414141414141414141414141・・・
Number of records:1
SQL文の動作確認を行う
例1
作成したSQL文の動作確認を行った後に実行履歴表示機能を利用して性能情報を取得するSQL性能情報出力例の詳細については、“4.3.6 SQL性能情報の出力形式”を参照してください。
$ rdbexecsql -mo
SQL>PRINT OFF
SQL>SELECT * FROM SCM1.TBL1
Number of records:20
SQL>SQL TRACE ON /tmp/trace.log
SQL>!SEL
SELECT * FROM SCM1.TBL1
Number of records:20
例2
作成したSQL文の実行を行う(ファイル入力)
$ rdbexecsql -mo
SQL>INFILE /tmp/sqlfile.txt
SQL>DELETE FROM SCM1.TBL1 WHERE INT_D = 1
EXECUTE?(y|n|q)=>y
Number of records:20
SQL>SELECT * FROM SCM1.TBL1
EXECUTE?(y|n|q)=>q
SQL>
SQL文の実行結果を画面表示する
例
出力結果行を5行とし、実行結果を表形式で出力する
$ rdbexecsql -mo
SQL>PRINT RECORDMAX 5
SQL>SELECT INT_D FROM SCM1.TBL1
INT_D
------
100
200
300
400
- 33 -
-
500
Number of records:20
- 34 -
-
第4章 データベースをチューニングする本章では、Symfoware/SQLTOOLで、データベースをチューニングする方法について説明します。
4.1 データベースのチューニング作業アクセスプランを参照することにより、Symfoware/RDBがどのようにデータベースにアクセスしているかを知ることができます。また、アクセスモデルから、Symfoware/RDBが持つアクセスシーケンスと特性を知ることができます。これにより、アプリケーションの開発者は、データベースの設計どおりにSQL文が動作しているかどうかを検証することができます。データベースの設計どおりにSQL文が動作していない場合は、データベースやSQL文のチューニングを行うことが必要となります。
データベースのチューニングは、以下の作業のときに行います。
・ データベース構築時
・ アプリケーション開発時
・ 性能検証チューニング時
・ 業務への機能追加時
業務を開始する前に適切なデータベースアクセスチューニングを実施しておけば、業務開始後に発生する性能トラブル
を未然に防ぐことができます。適切にチューニングされたデータベースは、業務開始後にデータ量の増減があっても、最
適化情報の更新(rdbupsコマンド)を実施する必要がなくなります。
4.1.1 データベース構築時データベースの設計およびインデックスの設計後に、最適化情報を設定します。次にSQL文を実行して、アクセスプランを取得し、データベースのチューニングを行います。
4.1.2 アプリケーション開発時作成したアプリケーションのSQL文のコンパイルおよび実行を確認し、エラーを修正します。また、データベースの設計どおりにSQL文が動作することを確認し、必要に応じて、データベースをチューニングします。
- 35 -
-
4.1.3 性能検証チューニング時データベースの構築後、疑似的にデータ情報をデータベースに格納し、性能検証のテストおよ�