コンポーネント、パラメーター、トラブルシューティングなど、SQL Server ユーティリティ オブジェクト スクリプトのリファレンス 資料にアクセスします。
概要
このスクリプトは、バージョン管理されたユーティリティ ストアド プロシージャと関数をインストールして、Lakeflow Connect でのインジェスト用に SQL Server データベースを設定します。 セットアップ タスクは次のとおりです。
- アクセス許可の管理
- 変更追跡 (CT) のセットアップ
- 変更データ キャプチャ (CDC) の設定
- プラットフォームの検出
- DDL では、スキーマ変更の追跡のためのオブジェクトの作成がサポートされます
バージョン情報
- 現在のバージョン: 1.1
- メジャー バージョン: 1
- マイナー バージョン: 1
- バージョン関数:
lakeflowUtilityVersion_1_1()
主なコンポーネント
Functions
lakeflowDetectPlatform()
SQL Server プラットフォームの種類を検出します。
戻り値: 'AZURE_SQL_DATABASE'、 'AZURE_SQL_MANAGED_INSTANCE'、 'AMAZON_RDS'、 'ON_PREMISES'、または 'UNKNOWN'
lakeflowUtilityVersion_1_1()
ユーティリティ オブジェクトのバージョンを検出します。
戻り値: '1.1'
ストアド プロシージャ
lakeflowFixPermissions
インジェスト操作に必要なアクセス許可をユーザーに付与します。
Parameters:
| パラメーター | Description |
|---|---|
@User (NVARCHAR(128)) |
必須。 アクセス許可を付与するユーザー名 |
@Tables (NVARCHAR(MAX)) |
Optional. テーブル レベルのアクセス許可スコープを制御します |
@Tables パラメーター オプション:
| Option | Description |
|---|---|
NULL |
システム レベルのアクセス許可のみを付与する (既定) |
'ALL' |
データベース内のすべてのユーザー テーブルに対するアクセス許可を付与する |
'SCHEMAS:Schema1,Schema2' |
指定したスキーマ内のすべてのテーブルに対するアクセス許可を付与する |
'Schema.Table1,Schema.Table2' |
特定のテーブルに対するアクセス許可を付与する |
| ワイルドカードのサポート | 例: 'Sales.*,HR.Employees' |
実行内容:
- 必要なシステム ビュー (
SELECT、sys.objects、sys.tablesなど) にsys.columnsを付与します。 - システム ストアド プロシージャ (
EXECUTE、sp_tablesなど) のsp_columns_100を許可します。 - 必要に応じて、
SELECTパラメーターに基づいてユーザー テーブルに@Tablesを許可します - プラットフォーム固有の違い (Azure SQL Database、Managed Instance、RDS、オンプレミス) を処理します
lakeflowSetupChangeTracking
DDL サポートを使用して、データベース レベルとテーブル レベルで変更の追跡を有効にします。
Parameters:
| パラメーター | Description |
|---|---|
@Tables (NVARCHAR(MAX)) |
Optional. CT を有効にするテーブル |
@User (NVARCHAR(128)) |
Optional. アクセス許可を付与するユーザー |
@Retention (NVARCHAR(50)) |
Optional. CT リテンション期間 (既定値: '2 DAYS') |
@Mode (NVARCHAR(10)) |
Optional.
'INSTALL' (既定値) または 'CLEANUP' |
@Tables パラメーター オプション:
| Option | Description |
|---|---|
NULL |
データベース レベルの CT と DDL のサポートのみを設定する (テーブルの有効化なし) |
'ALL' |
主キーを使用してすべてのユーザー テーブルで CT を有効にする |
'SCHEMAS:Schema1,Schema2' |
指定したスキーマのテーブルで CT を有効にする |
'Schema.Table1,Schema.Table2' |
特定のテーブルで CT を有効にする |
| ワイルドカードのサポート | 例: 'Sales.*,HR.Employees' |
実行内容:
- まだ有効になっていない場合は、データベース レベルで変更の追跡を有効にします
- バージョン管理された DDL 監査テーブルを作成します (
lakeflowDdlAudit_1_2) - スキーマの変更をキャプチャする DDL 監査トリガーを作成します
- 指定したテーブルに対して CT を有効にします (主キーのないテーブルをスキップします)
- 指定したユーザー
VIEW CHANGE TRACKINGアクセス許可を付与します -
CLEANUPモード: DDL サポートオブジェクトを削除します
重要な動作:
- 主キーのないテーブルを自動的にスキップします (これらには CDC をお勧めします)
-
'ALL'パラメーターを使用したスマート検出 - 冪等性: 複数回実行しても結果が変わらず安全
lakeflowSetupChangeDataCapture
DDL サポートとキャプチャ インスタンス管理を使用して、データベースレベルとテーブル レベルで CDC を有効にします。
Parameters:
| パラメーター | Description |
|---|---|
@Tables (NVARCHAR(MAX)) |
Optional. CDC を有効化するためのテーブル |
@User (NVARCHAR(128)) |
Optional. アクセス許可を付与するユーザー |
@Mode (NVARCHAR(10)) |
Optional.
'INSTALL' (既定値) または 'CLEANUP' |
@Tables パラメーター オプション:
| Option | Description |
|---|---|
NULL |
データベース レベルの CDC と DDL のサポートのみを設定する |
'ALL' |
すべてのユーザー テーブルで CDC を有効にする |
'SCHEMAS:Schema1,Schema2' |
指定したスキーマのテーブルで CDC を有効にする |
'Schema.Table1,Schema.Table2' |
特定のテーブルで CDC を有効にする |
実行内容:
- まだ有効になっていない場合は、データベース レベルで CDC を有効にします
- キャプチャ インスタンス追跡テーブルを作成します (
lakeflowCaptureInstanceInfo_1_2) - キャプチャ インスタンス管理用のヘルパー プロシージャを作成します。
lakeflowDisableOldCaptureInstance_1_2lakeflowMergeCaptureInstances_1_2lakeflowRefreshCaptureInstance_1_2
- スキーマ変更の自動処理用の
ALTER TABLEトリガーを作成します - 指定したテーブルで CDC を有効にします
- 指定したユーザーに必要な CDC アクセス許可を付与します
-
CLEANUPモード: すべての CDC DDL サポート オブジェクトを削除します
重要な動作:
- 主キーの有無に関係なくテーブルを利用できます
- スキーマの変更時にキャプチャ インスタンスのローテーションを自動的に処理する
- 冪等性: 複数回実行しても結果が変わらず安全
プラットフォームのサポート
- オンプレミスの SQL Server (EngineEdition 1-4)
- Azure SQL Database (EngineEdition 5)
- Azure SQL Managed Instance (EngineEdition 8)
- Amazon RDS for SQL Server (サーバー名パターンによって検出)
[前提条件]
- スクリプトを実行するユーザーは、
db_ownerロールのメンバーである必要があります - CTセットアップのためには、変更追跡機能がプラットフォームで利用可能である必要があります。
- CDC セットアップの場合: 変更データ キャプチャはプラットフォームで使用できる必要があります
インストール手順
スクリプトをダウンロードして実行する
スクリプトのダウンロード: utility_script.sql
スクリプトを実行する
- ダウンロードしたスクリプトを SQL Server Management Studio (SSMS)、Azure Data Studio、または任意の SQL クライアントで開きます。
- SQL Server インスタンスに接続します。
- ユーティリティ オブジェクトをインストールするターゲット データベースに接続されていることを確認します。
- スクリプトを実行します。
インストールの確認
-- Verify installation SELECT dbo.lakeflowUtilityVersion_1_1() AS UtilityVersion; SELECT dbo.lakeflowDetectPlatform() AS Platform;
別の方法: コマンド ラインを使用して実行する
sqlcmdを使用する場合:
sqlcmd -S YourServerName -d YourDatabase -E -i lakeflow_utility_objects.sql
注
YourServerNameとYourDatabaseを実際のサーバー名とデータベース名に置き換えます。 Windows 認証を使用しない場合は、-U username -P passwordの代わりに-Eを使用します。
例: アクセス許可を修正する (システムのみ)
-- Grant system permissions only
EXEC dbo.lakeflowFixPermissions
@User = 'myuser';
例: アクセス許可を修正する (テーブル アクセスを使用)
-- Grant system permissions plus access to all tables
EXEC dbo.lakeflowFixPermissions
@User = 'myuser',
@Tables = 'ALL';
-- Grant permissions for specific schemas
EXEC dbo.lakeflowFixPermissions
@User = 'myuser',
@Tables = 'SCHEMAS:Sales,HR,Production';
-- Grant permissions for specific tables
EXEC dbo.lakeflowFixPermissions
@User = 'myuser',
@Tables = 'Sales.Orders,HR.Employees';
例: 変更追跡の設定
データベース レベルのみ
-- Setup CT infrastructure without enabling on tables
EXEC dbo.lakeflowSetupChangeTracking
@Tables = NULL,
@User = 'myuser';
すべてのテーブルで有効にする
-- Enable CT on all user tables with primary keys
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'ALL',
@User = 'myuser';
スキーマ ベースのセットアップ
-- Enable CT on all tables in specific schemas
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'SCHEMAS:Sales,HR',
@User = 'myuser',
@Retention = '3 DAYS';
特定のテーブル
-- Enable CT on specific tables
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'dbo.Table1,Sales.Orders,HR.Employees',
@User = 'myuser';
例: CDC のセットアップ
データベース レベルのみ
-- Setup CDC infrastructure without enabling on tables
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = NULL,
@User = 'myuser';
すべてのテーブルで有効にする
-- Enable CDC on all user tables
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'ALL',
@User = 'myuser';
特定のテーブル
-- Enable CDC on specific tables
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'dbo.Table1,Sales.Orders',
@User = 'myuser';
例: ハイブリッドアプローチ
-- Step 1: Enable CT on tables with primary keys
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'ALL',
@User = 'myuser';
-- Step 2: Enable CDC on remaining tables (without primary keys)
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'ALL',
@User = 'myuser';
例: クリーンアップ
-- Remove CT DDL support objects
EXEC dbo.lakeflowSetupChangeTracking
@Mode = 'CLEANUP';
-- Remove CDC DDL support objects
EXEC dbo.lakeflowSetupChangeDataCapture
@Mode = 'CLEANUP';
作成された DDL サポート オブジェクト
変更の追跡と CDC のどちらを使用するかに応じて、次の DDL サポート オブジェクトが作成されます。
変更追跡のために
| オブジェクトの種類 | 名前 | Description |
|---|---|---|
| 表 | lakeflowDdlAudit_1_2 |
DDL 変更履歴を格納します |
| トリガー | lakeflowDdlAuditTrigger_1_2 |
ALTER TABLE イベントをキャプチャします |
CDC の場合
| オブジェクトの種類 | 名前 | Description |
|---|---|---|
| 表 | lakeflowCaptureInstanceInfo_1_2 |
キャプチャ インスタンスを追跡します |
| Procedure | lakeflowDisableOldCaptureInstance_1_2 |
古いキャプチャ インスタンスを削除します |
| Procedure | lakeflowMergeCaptureInstances_1_2 |
インスタンス間でデータをマージします |
| Procedure | lakeflowRefreshCaptureInstance_1_2 |
新しいキャプチャ インスタンスを作成します |
| トリガー | lakeflowAlterTableTrigger_1_2 |
スキーマの変更を処理する |
変更の追跡の制限事項
- 主キーが必要です。主キーのないテーブルでは、変更の追跡を使用できません。
- このスクリプトは、PK(プライマリーキー)がないテーブルを自動的にスキップし、代わりに CDC を使用することをお勧めします。
プラットフォーム固有の動作
- Azure SQL Database: システム ストアド プロシージャには既定でアクセスできます (
EXECUTE許可は必要ありません)。 - サーバー スコープ ビュー:
sys.change_tracking_databasesなどのビューに対する Azure SQL Database の制限付きアクセス。
アップグレード経路
- スクリプトは、実行時に以前のすべてのバージョンを自動的に削除します。
- バージョン管理スキーム:
objectName_majorVersion_minorVersion - 現在のオブジェクトは、バージョン追跡
_1_1サフィックスを使用します。
ベスト プラクティス
- 常に、
db_ownerまたは同等の特権を持つユーザーとして実行します。 - 最初に非運用データベースでテストします。
- 包括的な適用範囲を実現するために、ハイブリッドアプローチを使用します。
- セットアップ後に
lakeflowFixPermissionsを実行して、適切なユーザー アクセスを確保します。 - インジェストの頻度に基づいて保持期間を検討してください。
トラブルシューティング
"このスクリプトを実行するユーザーは 'db_owner' ロール メンバーではありません"
解決策: db_owner ロールを持つユーザーとして実行する
"カタログで変更の追跡が有効になっていません"
解決策: データベース レベルで CT を有効にするか、プロシージャで自動的に処理させる
"Change data capture is not enabled on catalog" (変更データ キャプチャがカタログで有効になっていません)
解決策: データベース レベルで CDC を有効にするか、プロシージャで自動的に処理させる
"主キーがないためにスキップされたテーブル"
解決策: 代わりにこれらのテーブルに lakeflowSetupChangeDataCapture を使用する
検証の統合
次のユーティリティ オブジェクトは、Java 検証フレームワークによって検証されます。
| Object | Description |
|---|---|
SqlServerUtilityObjectsSetupValidator |
ユーティリティ オブジェクトのインストールを検証します |
SqlServerChangeDataManagementSetupValidator |
CT/CDC のセットアップを検証します |
SqlServerDdlSupportObjectsSetupValidator |
DDL サポート オブジェクトを検証します |
SqlServerPermissionsSetupValidator |
アクセス許可を検証します |
移行のメモ
古いバージョンの DDL サポートオブジェクト(ユーティリティ導入前のオブジェクト)からアップグレードする場合:
- スクリプトは、レガシ オブジェクトを自動的にクリーンアップします。
- 手動クリーンアップは必要ありません。
- バージョン 1.1 では、すべての機能が統合された手順に統合されています。