|
||||
1. 表から重複データを削除する方法は? |
||||
student表、students(id char(5),name char(20))を想定し、この表から重複するデータを削除する場合、
1.表'temptable'に重複idを移動します。 dmSQL> select id 2> from student 3> group by id having count(*)1 4> into temptable; 2.全ての重複するidデータを削除します。 dmSQL> delete from student 2> where id in ( 3> select id from temptable 4> ); 注 : 1. id=3008のレコードが2つある場合、これらのレコードは削除されます。 2. 実行時間を短縮するために、idとnameカラムに索引を設けることができます。 |
||||
2. 特定のデータの検索方法は? |
||||
※例えばクラスで成績が前から30%に入る学生を検索する方法 下記のSQL文で、学生の成績表、student(name char(10),score int)から、クラスで成績がトップ30%に入る学生を見つけることができます。 dmSQL> create temp table tt1 ( 2> c1 serial(1), 3> name char(10), 4> score int 5> ); dmSQL> select * 2> from student 3> group by score, name 4> into tt1 (name,score); dmSQL> select name,score 2> from tt1 3> where c1 ( 4> select count(c1)*0.7 5> from tt1 6> ) 7> order by score desc; 注 : これらのコマンドを実行する度に、temp table tt1を再作成する必要があります。 |
||||
3. DBMasterのアプリケーション・プログラムの開発ツールは? |
||||
ODBCを使用している開発ツールは、全てDBMasterのアプリケーションを開発するために使うことができます。例えば、UNIXプラットフォーム上のCや、Windows、Visual
Basic、delphi、Access、Visual C++、Borland C++、Visual FoxPro、PowerBuilder等です。
|
||||
4. Delphiを使ったDBMasterへの接続方法は? |
||||
DBMasterパッケージのDelphi サンプル・プログラムのためのREADME.TXT
ファイルを参照してください。DBMasterをインストールしたC:\dbmaster の中のC:\dbmaster\Samples\Delphi
にあります。 |
||||
5. Visual Basicを使ったDBMasterへの接続方法は? |
||||
DBMasterパッケージのVBサンプル・プログラムのためのREADME.TXT ファイルを参照してください。DBMasterをインストールしたC:\dbmaster
の中のC:\dbmaster\Samples\VBにあります。 |
||||
6. アプリケーション・プログラムから直接表を開く方法は? |
||||
アプリケーション・プログラムがDBMasterのデータベースに接続しているときに、SQLコマンドを実行してデータベースに問い合わせることができます。表を開く必要はありません。
|
||||
7. DBMasterで特定の表の存在を確認する方法は? |
||||
ODBCの機能で、SQLExecute()を使ってselect * from tableを実行し、その表が存在しない時、SQLExecute()
は-1.に戻ります。同時に、SQLError()を実行することによって、エラー(6521)「表又はビューが存在しません」が表示されます。 |
||||
8. DBMasterで以下のSQL文を実行できますか?(Informixでは可能)
|
||||
Select a.field1,b.field2 from a outer b where exist ( select c.field1,c.field2 from c where a.field1=c.field1 group by c.field3,c.field4 ) and a.field3=b.field3 このSQL文は、DBMasterでは構文エラーとなります。DBMasterは、existの替わりにexistsを使用しています。existをexistsに置き換えて、SQL文を実行するとエラー「エラー:集計しないカラムは必ずGROUP
BY リストの中にいなければなりません」が戻されます。 |
||||
9. エラー・メッセージ「Invalid host element」はどのような意味ですか?
|
||||
エラー・メッセージ「無効なホスト要素」は、次のような際に表示されます。 1. where句にbind NULL valueがある。 2. where句にbind longvarcharがある。 3. データ型が合致していない。 |
||||
10. データをロックしないで読む方法は? |
||||
一般的には、select文のSHARE lock(共有ロック)でデータをロックします。データをロックしたくない場合は、SELECT
... FOR BROWSE文を使用します。これはロックを実行しません。これをダーティ・リードやブラウズ読みと呼びます。 |
||||
11. 「ダーティ・リード」とはどういう意味ですか?使用方法は? |
||||
DBMasterのロック技術によって、同時に複数のユーザがデータベースにアクセスできます。表やページ、レコードといったリソースをユーザが使用している時に、そのユーザがinsertを実行すると、他のユーザを締出し、そのリソースでは何もできなくなります。ユーザにリソース内での操作を実行させないよう制限する時、「ダーティ・リード」と呼びます。「ダーティ・リード」のコマンド構文は、読み込み専用のselect文です。
オンライン・データ検索で「ダーティ・リード」を使えば、select操作でデータが参照される際により効果があります。 各操作の際にデータがロックされた状態にならないようにします。 |
||||
12. ODBCはパフォーマンスを下げますか? |
||||
ODBCはAPIの定義にすぎません。ODBC APIの効果を判断するのは無意味なことです。パフォーマンスの実際の効果は、ODBC
ドライバを実行する時に発揮するのであって、ODBC APIの定義ではありません。ODBCのパフォーマンスを話題にする時、ODBCドライバの製品パフォーマンスの良し悪しを問題にするべきでしょう。
|
||||
13. データベース・サーバを他のマシンに移動する際(UNIXからWindows、 WindowsからUNIX)、APを修正する必要がありますか?
|
||||
修正の必要はありません。AP側の環境設定(dmconfig.ini)にあるキーワードDB_SvAdr
を変更するだけです。ユーザは、新しいデータベース・サーバーに接続するためにDB_SvAdrを新しいIPアドレスに変更するだけです。 |
||||
14. 表を他のデータベースに移す方法は? |
||||
dmSQL文のLOADとUNLOADを使うことができます。 UNLOAD文は、表と表のスキーマから外部ファイルへデータをダウンロードします。 この外部ファイルはスクリプト・ファイルで、表スキーマ、索引の作成、新規データ挿入のためのdmSQL文が含まれています。このファイルは、LOAD文を使って表をアップロードする時に使われます。 表で使えるUNLOAD文は2種類あります。 1. UNLOAD TABLE文。 この文はデータをダウンロードするだけでなく、表を作成するためのコマンドをファイルに記録します。 2. UNLOAD DATA文。このコマンドはデータをダウンロードするのみです。 下記の例は、dmSQLを使って表tb1をデータベースdb1からデータベースdb2に移動する方法を示しています。 例1: dmSQL> connect to db1 SYSADM; dmSQL> unload table from tb1 to 'j:\database\tb1'; dmSQL> disconnect db1 ; dmSQL> connect to db2 SYSADM; dmSQL> load table from 'j:\database\tb1'; データベース全体をunloadする場合は、下記のコマンドを入力して下さい。 例2 : dmSQL> connect to database-name SYSADM; dmSQL> unload db to new-database-name ; |
||||
15. ロック・レベルの選択にあたり考慮すべき事は? |
||||
ロック・レベルの選択は、同時実行性とリソースの問題です。高いロック・レベルを使用すると、データ同時実行性が低くなりますが、共有メモリのようなシステム・リソースの使用が少なくなります。
ロック・レベルの選択の最善の方法は、ユーザのニーズを見極めることです。 |
||||
16. MySQLからDBMaster へのデータの転送方法は? |
||||
いくつかの方法があります。最も簡単な方法は、MySQLからDBMasterのスクリプト・ファイルにエクスポート・ファイルをコンバートすることです。
1. エクスポート・ツールmysqldumpを使って、データをMySQLデータベースから出力ファイルにエクスポートします。mysqldump を使う際は、特別なオプションを付けないようにして下さい。例えば、testという名前のMySQLデータベースから出力ファイル'test-out.txt'にデータをエクスポートする場合は、次のコマンドを入力して下さい。 $> mysqldump test > test-out.txt; 2. 次の文を入力して、test-out.txtにあるコメント・シンボル#を//に変更して、dbmaster.txtという名前のファイルにその出力を入れます。 $> sed -e 's/#/\/\//g' test-out.txt > dbmaster.txt; 3. データ型のマッピングと異なる構文のために出力ファイルを修正します。MySQLからDBMasterにデータ型をマップする方法は、以下の説明を参照して下さい。 データ型のマッピング MySQLのデータ型によっては、DBMasterに全く同じマッピング・タイプが存在しません。以下のリストに最も相似していると思われる種類を紹介します。 |
||||
MySQLのデータ型 TINYINT SMALLINT MEDIUMINT INT INTEGER BIGINT FLOAT(4) FLOAT(8) FLOAT DOUBLE DOUBLE PRECISION REAL DECIMAL(p,s) NUMERIC(p,s) DATE DATETIME TIMESTAMP TIME YEAR CHAR(n) VARCAHR(n) TINYBLOB TINYTEXT BLOB TEXT MEDIUMBLOB MEDIUMTEXT LONGBLOB LONGTEXT ENUM SET |
DBMasterのデータ型 |
|||
追記 |
||||
17. Delphi,VB,Access等の開発ツールだけしか読むことができず、修正できない表があるのはなぜですか??
|
||||
それは、unique indexが作成されていないためです。開発ツールをデータベースに接続する時、表の修正をする場合、表にunique
indexを作成する必要があります。そうしなければ、開発ツールはこの表をread onlyとみなし、修正することができません。この制限は、開発ツールにもともとある制限であり、DBMasterには、このような制限はありません。従って、indexを作成しなくても、
DBMaster dmSQL やDBATool等のツールを通じて、直接、表を修正できます。 |
||||
18. "auto-commit
on"設定時に、Visual FoxPro上でODBCを用いてDDLを作成する場合、エラーがが発生するのはなぜですか? |
||||
Vsual FoxProのシーケンス機能はDBMasterのものと異なります。 |
||||
19. SQLExecDirect()で実行できる "RUN script-file"のコマンドがありますか?
|
||||
ありません。RUNコマンドは、DMSQLツールだけで使用できます。 標準のSQL記述文ではありません。
|
||||
20. DBMasterエラー・メッセージのバッファ・メモリはどれぐらいありますか? |
||||
DBMaster Error Messageの処理は、ODBC のSQLError()を参照して下さい。DBMasterは
標準ODBCのAPIとその制約に対応しています。ですから、DBMasterはhenvと関連するhdbcs とhstmtsで64個のエラーを記録することができます。
現在、DBMasterの最長のエラーメッセージの長さは、512バイトです。従って、SQLErrorでエラーメッセージをアクセスすればchar[512]は、完全な形でエラー・メッセージを見られます。
一般的に一つのSQLコマンドに対して一つの エラー・メッセージしか存在しません。ですから、もし、2回連続して call SQLError()を行うと2回目に得られるSQL_NO_DATA_FOUNDは、『アクセスできるエラーメッセージはありません』と表示します。'check db' , 'check tablespace', 'check index' 等の database consistency checking(DBCC)コマンドを実行する場合、最高64個の エラーメッセージにアクセスできます。 |
||||
21. アプリケーションは、なぜ、エラー・メッセージのアクセスを重視するのですか? |
||||
エラーメッセージの処理は、全てのシステム設計にとって非常に重要です。アプリケーションがデータベース・システムのエラーメッセージを無視することは大変危険なことです。DBMasterはリソースの使用の合法性を判断しますが、状況によっては判断しかねます。例えば、アプリケーションが不正確な処理メモリ・アドレスを得た場合、DBMasterは必ずしも判断できるとは限らないからです。
|
||||
22. DBMasterをマルチ・ユーザ環境下でロックする場合、考慮すべき点は何ですか?
|
||||
ロックする場合、次の2点について考慮しなければなりません。: データロック(data
lock)と索引ロック(index lock)です。 現在、DBMasterはデータをロックするために表ロック(table lock), ページロック(page
lock)及び行ロック(row lock)を提供しています。 索引ロックは、ページ・ロックに固定されています。 lock time outの発生の原因は、実行したコマンドがすでにロックしたデータにアクセスしたからです。もし、索引のロックの発生を防ぎたいのなら、適度にindex fill factorを調整し、アプリケーションのトランザクション(transaction)の設計に合わせて処理して下さい。 ロックは、S(share)ロックとX(exclusive)ロックに分かれており、読み取るデータをSロックに指定します。複数のSロックを並存できますが、Xロックは、Sロックを受け入れません。修正するデータをXロックに指定します。ダーティ・リードする以外は、他のユーザは、データを修正することができません。 DML (data manipulation language)操作のロック規定に関する簡単な説明は、次のとおりです。: 1. オン・ラインで検索したデータは、同時処理能力(concurrency control)の効率を向上させるために select操作時にdata lockingのエラーを防ぐためにもダーティ・リードをできるだけ使用して下さい。 2. data lockの考慮以外に、index lockを考慮すべきです。 現在、DBMasterは page lock ためのindex granularityだけをサポートしています。データは、Lock Mode ROWに設定できますが、index pageはロックされ、lock time outになるでしょう。この部分は、index fill factorの調整をし、AP transactionの設計処理に合わせる必要があります。 (1) INSERT操作に関しては、insert keyのindex pageがロックされていない限りDBMasterはロックされていないdata pageを探し、データを管理することができます。 (2) UPDATE操作をする場合、lock mode rowに設定すれば、異なるAPでも異なるrecordを更新できます。なぜなら、index lockはS(share) lockなので、index keyを更新しない限り問題ありません。 (3) DELETE 操作 をする場合、ロックされていないdeleted keyのindex pageを削除する必要があります。ロックされてないdeleted rowだけが削除できます。 3. UPDATEを行う場合に、index key値を更新しない場合は、table lock modeによりデータのカラムまたはページに対するロックだけを修正できます。Index pageに対してSロックができ、即ち異なるユーザーでも同時に異なるデータを修正できます。しかし、index key値が修正された場合、Index pageに対してX lockをし、key値に近いデータの修正は行えません。 |
||||
23. DBMasterのClient/Server環境下でのロックの処理方法は? |
||||
1. オン・ラインで検索したデータは、同時処理能力の効率を向上させるために select操作時にdata
lockingのエラーを防ぐためにもダーティ・リードをできるだけ使用して下さい。 2. data lockの考慮以外に、index lockを考慮すべきです。 現在、DBMasterは page lockためのindex granularityだけをサポートしています。データは、Lock Mode ROWに設定できますが、index pageはロックされ、lock time outになるでしょう。この部分は、index fill factorの調整をし、AP transactionの設計処理に合わせる必要があります。 (1) INSERT 操作に関しては、insert keyのindex pageは、ロックされていないなら、 DBMasterはロックされていないdata pageを探し、データを管理することができます。 (2) UPDATE操作 をする場合、lock mode rowに設定すれば、異なるAPでも異なるrecordを更新できます。なぜなら、index lockはS(share) lockなので、index keyを更新しない限り問題ありません。 (3) DELETE 操作 をする場合、ロックされていないdeleted keyのindex pageを削除する必要があります。ロックされてないdeleted rowだけが削除できます。 3. UPDATE 操作(set autocommit off)を実行する時、もし、一件のrecordを更新後、(commit work実行以前に), そのrecordが所属するindex page がS(share) Lockに設定され、その recordは X(exclusive) Lockに設定されますので、その record と同じindex pageデータの INSERT, DELETEの操作、SELECTでそのrecordを検索するSELECT operationを行えません。ですから、このデータは、ダーティ・リードで読みこんでください。 4. Locking とerror messageの処理はメモリを消費します。システムがDBMasterに与えるスペースが足りない時、DBMasterは次のようなエラー・メッセージを表示します。『'allocated system resource is insufficient'. DB_NBUFS and DB_NJNLB are the number of data pages and journal pages cached in shared memory,』この二つのパラメーターは、システムのパフォーマンスに影響を与えます。ですから、処理するデータ量に合わせて調整する必要があります。ただし、DB_SCASZ は、システム・コントロール・バッファ、記録制御情報などのロック情報やトランザクション情報を定義します。同時にデータベースに接続するユーザ数(concurrent user)が増加したもしくはtransactionが比較的長いlock granularity比較的細い時、 SCAの適当な配置を考慮すべきです。 5. 現在、DBMasterのa connection handleは、48個のstatement handleしか提供できません。 過多なhandlesの処理は、データベースが負担できないので、AP設計時には、この点を十分注意しなければなりません。. |
||||
24. APでDBMasterの表をアクセスする場合、表を開く必要がありますか? |
||||
必要ありません。APが一旦DBMaster databaseに接続した後、直接SQL
commandを実行してデータを検索できます。PC上でデータ読むために表を開けるのは、Xbaseデータベースの方法です。 |
||||
25. 以下のSQLはSQL
Serverでは実行可能ですが、DBMasterではエラーが発生します。何故ですか? |
||||
SELECT top 1(SELECT MAX(TRK_FILENAME)FROM MTSMTRK),* |
||||
26. UNLOAD”コマンドを実行する方法はありますか? |
||||
DOSモードではバッチファイルおよびスクリプトファイルを作成する必要があります。 -UNLOADスクリプト(unload.txt) connect to dbsample4 sysadm; unload db to dbsample4; quit; -バッチファイル(unload.bat) dmsql32 c:\unload.txt |
||||
27. 他のデータベースからDBMasterへデータを移すにはどうしたらよいですか? |
||||
データベースがODBCをサポートしているのであれば、ODBCインターフェースとデータ・インポート/エクスポート機能を備えているユーティリティを使用することができます。
include: the Delphi Data Migration Wizard utility, the Access Import/Export function and the SQL Server MS Query tool. 以上は他のデータベースからDBMasterへデータを移動させることができます。 |
||||
28. FileObjectとは何ですか?APはこれらファイルをどのように使用しますか? |
||||
DBMaster内のファイルオブジェクトはBLOB型です。Long VercharとLong VarBinaryとの違いはファイルオブジェクトの名前がデータベースに入っているということだけです。この状態はデータベース内のスペースを減らし、データベースはファイルオブジェクトへのリンクを作成します。ユーザはファイルオブジェクトを開く必要はありません。ユーザはファイルオブジェクトにダイレクトに接続することができます。 | ||||
29. Delphi使用でDBMasterに接続しようとしたときに "Function
Sequence Error"とエラーメッセージが表示されます。その場合の解決法は? |
||||
環境設定ファイルに " DB_CBMOD = 2 "を加えてください。 | ||||
30. バッチを使い、以下のコマンドで、テーブルを作成しようとするとエラーメッセージが上がるのはなぜですか? |
||||
DBMakerのODBC機能ではSQLバッチファイルを直接使うことができません。スキーマファイルを作成するだけならば
双方向性のSQLツール・DBMasterのdmSQLツールを使用することによってSQLスクリプトファイルを使用することができます。 アプリケーションをクライアントサイトにインストールする際にはローカルデータベースを作成してください。 |
||||
31. DBMakerとFoxproのテキストボックス間のデータ領域でデータ型を"date"に変えたい場合、この領域にDTOC()を加えることとデータ型変更後に処理をすることは可能ですか? |
||||
可能です。"char"型で保存し、自動変換アプリケーションを使用してください。 | ||||
32. 主キーを構成する2つの領域をどうやって比較しますか。 |
||||
例:ケース番号(年+シリアル番号)に基づいたクエリは主キーです。 キーのイニシャルが085 - 090000 と設定されていて、テーブル内でケース番号が (year>85)あるいは(year = 85 and number > 90000)の値より大きいものがリストされます。 |
||||
33. ODBCソースデータのインストール方法は? |
||||
DBMasterインストール後にサンプルデータベースを使用することによってODBCソースデータのインストールの練習をすることができます。 まず、サンプルデータベース(DBMEMO)のチェックをする必要があります。 (DBMEMO)は以下のディレクトリに存在します。 \DBMAKER\SAMPLE\DATA 続けて、 1.環境設定ファイルを開き [DBDEMO] DB_DbDir = \SAMPLE\DATA と書き込みます。 2.コントロールパネルからODBCをクリックします。(ODBCが見つからない場合はOBDC DBMasterドライバを再インストールする。以下のディレクトリにあります。DBMaker CD: \CLIENTS\WINDOWS\ODBC.) ソースデータが表示されたら、DBDEMOのソースデータを選択、DBMaster ODBCのセットアップウィンドウに以下のメッセージが表示されます。 data source name:DBDEMO data directory:\SAMPLE\DATA |
||||
|
||||