少し前に、データベース内のメタ情報を検索するための無料のSQL Dynamiteユーティリティを発表しました 。 良いレビュー、批判、そして発見されたエラーに感謝します。
更新プログラムをリリースし、見つかったバグを修正し、 SQLiteとInformixのサポートを追加しました。
新しいバージョンはこちらから入手できます 。
前の記事で、データベースのメタ情報へのアクセスを検討することを約束しました。 今日は、MS SQLとSybaseについてお話します。
DBMS Microsoft SQL Server、Sybase Adaptive Server Enterprise、Sybase Anywhere、およびSQL Azureのさまざまなオブジェクトの関係を検索および分析するプロセスは、主にメタデータの操作にあります。
問題は、最初は同じメタデータ構造を持っていたSybase ASEとMSSQLが独立して長い道のりを歩んできたことです。 Sybase Anywhereは元々Watcom SQLであり、Sybase ASEとは多くの違いがあり、SQL Azureは一般的にクラウドベースのDBMSです。 ただし、それらのメタデータ構造は非常に似ており、特にオブジェクト(sysobjects、syscomments、syscolumns)に関する主要な情報を含む同じテーブル名を持っています。
この記事では、以下のバージョンのDBMSメタデータ構造について説明します。
MSSQL 2005、Sybase ASE 15.7、Sybase Anywhere 12.0.1、およびSQL Azureの現在のバージョン。
0)
すべてのデータベースに共通のテーブルとストアドプロシージャ
テーブル:
1.
sysobjects
システム内のすべてのオブジェクトに関する情報(ID、オブジェクト名、オブジェクトタイプ、およびその他のパラメーター)を格納するために使用されます。
メタデータを操作するためのメインテーブル。
2.
syscomments
ストアドプロシージャ、ユーザー関数、トリガー、およびビューのテキストを保存します。
3.
syscolumns
各テーブルの列に関する情報(名前、タイプなど)を保存します。
ストアドプロシージャ:
4.
sp_columns
テーブル列に関する情報を名前で表示するストアドプロシージャ。
1)
複数のDBMSに固有のテーブルとストアドプロシージャ:
テーブル/ビュー:
1.
sysconstraints
(MSSQLおよびSybase ASE)主キー、外部キー、および同様のオブジェクト(一意のキー、チェック、デフォルト)に関する情報を保存します。
2.
sys.sysindexes (表示)または
sysindexes (テーブル)
(MSSQLおよびSybase ASEおよびSybase Anywhere)インデックス情報を格納します。
3.
sys.sysforeignkeys
(MSSQLおよびSybase Anywhere)外部キーに関する情報を格納します。
ストアドプロシージャ:
4.
sp_helpindex
(MSSQL&SQL Azure&Sybase ASE)テーブルインデックスに関する情報を名前で返すストアドプロシージャ。
5.
sp_helpconstraint
(MSSQLおよびSybase ASE)テーブルの外部キーと主キーに関する情報を名前で返すストアドプロシージャ。
Microsoft固有のDBMS固有のテーブルとストアドプロシージャ:
2)
MSSQL
1.
sp_MShelpcolumns
これは、名前でテーブル列に関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。
2.
sp_MStablekeys
これは、名前で表の主キーと外部キーに関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。
3.
sp_MStablechecks
これは、名前によるテーブル制限に関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。
3)
MSSQL + SQL Azure
Microsoft SQL Server(バージョン2005以降)などのSQL Azureは、INFORMATION_SCHEMAをサポートしています(これら2つのDBMSに加えて、この標準はMySQLおよびPostgreSQLでもサポートされています)。
1.
sys.indexes
インデックスと主キーに関する情報を保存します。
2.
sys.sql_modules (Azure SQLのみ)
トリガーに関する情報を保存します。
3.
sys.triggers
前の表と同様に、トリガーに関する情報を格納します。
4.
sys.foreign_key_columns
外部キーに関する情報を保存します。
さらに、MSSQL(バージョン2005以降)は、情報スキーマなどをサポートしています。 つまり、これはメタデータを保存するための標準です。つまり、DBMSには、さまざまなタイプのオブジェクトに関する情報を提供する読み取り専用ビューの特別なセットが必要です。 例:
1.
information_schema.views
(MSSQLおよびSQL Azure)ビューに関する情報を格納します。
2.
information_schema.routines
(MSSQLおよびSQL Azure)ストアドプロシージャおよび関数に関する情報を格納します。
ご覧のとおり、メタデータの構造に大きな違いがあるにもかかわらず、同様のアプローチがこれらのDBMSのコンテンツの分析に適用される可能性があります(当然ながら、一定の制限があります)。 それらを扱う基本的なロジック(発生の検索、メタデータによるDDLの生成)は、SQL Dynamiteで既に実装されています。