SAP HANA
SAP HANA HDIコンテナとは?スキーマ構成とデプロイ、障害対応の実務
SAP HANAのHDIコンテナについて、コンテナスキーマの役割、開発オブジェクトのデプロイ、権限設計、失敗時の切り分けをオンプレミise環境の運用視点で解説します。
SAP HANAでアプリケーションを開発するとき、データベースオブジェクトをアプリケーション単位で管理する仕組みとしてHDIコンテナを使用します。テーブル、ビュー、ロール、プロシージャなどをプロジェクトの成果物として定義し、デプロイによってデータベースへ反映できます。個別の開発者が共有スキーマを直接変更する運用から、再現可能なデプロイ中心の運用へ移行できる点が重要です。
この記事では、SAP HANAオンプレミise環境でHDIコンテナを扱う際のスキーマ構成、権限、デプロイ手順、失敗時の確認順序を整理します。開発全体の位置付けは、SAP HANA開発の概要も参照してください。
HDIコンテナの基本構成
HDIは、データベースオブジェクトをアプリケーションのライフサイクルに結び付けて管理するためのデプロイメントインフラです。開発プロジェクトには、テーブル定義、Calculation View、ロール、シノニム、サービス設定などの成果物を含めます。デプロイツールはこれらの定義を読み取り、対象のHDIコンテナへ作成・変更・削除を反映します。
HDIコンテナでは、アプリケーションが利用するデータベースオブジェクトを専用のコンテナスキーマに分離します。通常の開発者ユーザーが所有者として直接オブジェクトを管理するのではなく、コンテナの技術ユーザーがデプロイを実行し、アプリケーション実行用のアクセスも別の技術ユーザーへ分けます。
代表的な構成は次のとおりです。
- コンテナスキーマ:アプリケーションのテーブル、ビュー、プロシージャなどを格納する領域
- デプロイ用ユーザー:成果物の作成・変更・削除を担当する技術ユーザー
- 実行用ユーザー:アプリケーションから公開されたオブジェクトを利用する技術ユーザー
- 外部サービス接続:別スキーマや別データベースのオブジェクトを参照するための定義
- ロール定義:アプリケーションユーザーや実行用ユーザーへ付与する権限の単位
開発者がSQLクライアントで作成したオブジェクトを後からHDIへ取り込む運用にすると、デプロイ元の定義と実データベースの状態がずれます。ソース管理下の成果物を正本にし、データベース上の変更はデプロイから行う方針が安定します。
HDIコンテナと通常スキーマの違い
通常のスキーマ運用では、ユーザーがSQLでオブジェクトを作成し、権限もデータベース上で個別に変更します。一方、HDIコンテナでは、オブジェクト定義と権限定義をアプリケーションプロジェクトの一部として扱います。これにより、開発・テスト・本番へ同じ構成を段階的に展開しやすくなります。
HDIコンテナのスキーマ名をアプリケーションの固定値としてコードへ埋め込む設計は避けます。接続情報やスキーマ情報は、アプリケーションのバインディングや環境設定から受け取り、デプロイ先ごとの値を使う構成にします。環境ごとにスキーマ名が異なっても、アプリケーションコードを変更せずに動かせます。
また、コンテナ内のオブジェクトと外部スキーマのオブジェクトは権限境界が異なります。外部テーブルを参照する場合は、外部スキーマ側の権限、HDI側のシノニムやサービス定義、実行用ユーザーの権限を順番に確認します。開発者へ広い権限を与えて接続を成立させるより、必要なオブジェクトだけを公開する設計が安全です。
HDIコンテナのデプロイ手順
デプロイ前には、対象データベース、コンテナ、接続情報、ソースブランチを確認します。特に開発環境と本番環境の接続先を取り違えると、正しい成果物でも重大な変更になります。ジョブやパイプラインでは、接続先を環境変数や保護された認証情報として管理し、ログへパスワードを出力しないようにします。
基本的な作業の流れは次のとおりです。
- プロジェクトの成果物をソース管理へ登録する
- デプロイ対象のブランチと対象環境を確認する
- コンテナへの接続情報とデプロイ用ユーザーを確認する
- デプロイを実行し、作成・変更・削除の一覧を確認する
- デプロイログで各成果物の処理結果を確認する
- アプリケーション接続と主要なSQL処理を検証する
- 実行結果とログを変更記録へ保存する
テーブル定義を変更する場合は、既存データへの影響を先に評価します。列の削除、データ型の変更、必須制約の追加は、デプロイ処理だけで安全に完了するとは限りません。データ移行、互換期間、アプリケーションの切り替え順序を設計してから成果物を更新します。
ビューやCalculation Viewを含む場合は、参照先オブジェクトのデプロイ順序も確認します。基礎テーブル、型、シノニム、計算ロジック、権限定義の依存関係が壊れていると、後続の成果物が連鎖的に失敗します。Calculation Viewの設計を確認するときは、SAP HANAのCalculation Viewも関連資料として利用できます。
HDIコンテナのスキーマと権限設計
権限設計では、デプロイ用ユーザー、実行用ユーザー、管理者を分けます。デプロイ用ユーザーには成果物を管理するための権限が必要ですが、アプリケーションの実行ユーザーへ同じ権限を与える必要はありません。実行用ユーザーには、アプリケーションが実際に読むビューや呼び出すプロシージャなど、必要な対象だけを公開します。
ロールは、開発者向け、運用者向け、アプリケーション実行向けに分けると管理しやすくなります。開発者向けロールには設計・確認に必要な権限を、運用者向けロールには監視やログ確認に必要な権限を設定します。高い管理権限を一時的な接続確認のために常用しないことが大切です。
外部スキーマを参照する設計では、次の項目を記録します。
- 外部オブジェクトの所有者
- HDI側で使用するシノニムまたは参照定義
- 権限を付与するユーザーまたはロール
- 実行用ユーザーが利用する接続情報
- テーブル変更時に影響を受けるアプリケーション処理
権限変更後は、管理者接続だけでなく、実行用ユーザーと同じ接続経路で検証します。管理者接続で成功しても、アプリケーション接続で必要な権限が不足しているケースがあります。権限の付与とアプリケーションのバインディングを別々に確認すると、原因を絞り込みやすくなります。
デプロイ失敗の切り分け
HDIデプロイが失敗したときは、最初にデプロイログの最初のエラーを確認します。後続のエラーは、最初のオブジェクトが作成されなかったことによる二次障害の場合があります。エラー文を最後の行だけで判断せず、対象ファイル、オブジェクト名、実行ユーザー、依存先を一緒に確認します。
接続エラーでは、対象データベース、ホスト、ポート、認証情報、ネットワーク経路、TLS設定を確認します。接続先を確認する際は、開発環境の接続情報を本番環境へ流用していないか、期限切れの資格情報を使っていないかを調べます。
認証・権限エラーでは、次の順序で確認します。
- デプロイ処理がどのユーザーで実行されたかを確認する
- 対象コンテナが正しいデータベースに存在するかを確認する
- 作成対象オブジェクトの所有者と依存先を確認する
- 外部スキーマ参照に必要な権限を確認する
- アプリケーション実行用ユーザーの権限を別途確認する
オブジェクト作成エラーでは、同名オブジェクト、無効な依存関係、予約語、型の不整合を確認します。成果物のファイル名を変えた場合、データベース上では旧オブジェクトが残ることがあります。削除を伴う変更は、データ保持とロールバック手順を確認してから実施します。
Calculation ViewやSQLScriptを含むプロジェクトでは、参照先の変更が実行時エラーとして現れることがあります。デプロイ成功後も、代表的な入力条件で処理を実行し、結果件数とエラーを確認します。SQLScriptの処理を整理する場合は、SAP HANA SQLScriptプロシージャの考え方も役立ちます。
運用時の監視と変更管理
HDIコンテナを安定運用するには、デプロイ成功率だけでなく、デプロイ時間、失敗した成果物、権限変更、アプリケーション接続エラーを記録します。SAP HANA cockpitやSAP HANA database explorerで対象データベースの状態、ユーザー、スキーマ、オブジェクトを確認し、デプロイツールのログと突き合わせます。
変更記録には、変更者、実施日時、対象環境、対象コンテナ、変更内容、データ影響、検証結果を残します。緊急変更を行った場合も、後からソース管理上の成果物へ反映し、次回デプロイで手作業の変更が上書きされない状態にします。
バックアップや復旧手順を確認する際は、HDIコンテナ内のデータだけでなく、アプリケーション設定、接続情報の再作成方法、外部スキーマとの依存関係も対象にします。復旧後にコンテナは存在していても、実行用ユーザーや外部接続が再構成されていなければアプリケーションは動作しません。SAP HANAのバックアップとリカバリでは、データベース運用側の確認項目を整理しています。
本番デプロイ前のチェックリスト
本番環境へデプロイする前に、成果物の差分と削除対象を確認します。特にテーブル変更では、バックアップ状態、データ量、処理時間、アプリケーション停止の要否を確認します。変更を小さく分割し、失敗したときに原因と復旧方法を特定できる単位にします。
次のチェックを実施します。
- 対象データベースとHDIコンテナを確認した
- デプロイ用ユーザーと実行用ユーザーを分離した
- 外部スキーマへの参照権限を確認した
- 変更対象と削除対象をレビューした
- 依存するテーブル、ビュー、ロールの順序を確認した
- デプロイログを保存する場所を確認した
- アプリケーションの疎通確認項目を準備した
- 失敗時のロールバックまたは復旧手順を確認した
デプロイ後は、ログの成功表示だけで完了と判断せず、代表的なアプリケーション処理を実行します。読み取りだけでなく、登録、更新、権限が必要な処理も検証し、実行用ユーザーから見た結果を確認します。
まとめ
HDIコンテナは、SAP HANAのデータベースオブジェクトをアプリケーション単位で定義し、デプロイによって再現可能に管理するための基盤です。コンテナスキーマ、デプロイ用ユーザー、実行用ユーザー、外部スキーマ参照を分けて設計すると、権限と変更の境界を明確にできます。
運用では、最初のデプロイエラー、接続先、実行ユーザー、依存関係、外部オブジェクトの権限を順に確認します。SAP HANA cockpitとSAP HANA database explorerを使ったデータベース側の確認、デプロイログ、ソース管理上の成果物を組み合わせることで、HDIコンテナの問題を再現性のある手順で切り分けられます。