【SAP HANA】移行ツールを使ったHANA ServiceからHANA Cloudへの移行手順

## はじめに
HANA Serviceのサービス終了に伴い、移行ツールを用いてHANA Cloudへの移行を実施しました。
本記事では、移行ツールを用いた移行手順について紹介します。

## 移行手順
##### SAP HANA Cloudから「Manage Migrations」を選択
![スクリーンショット 2024-05-10 1850382.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/160f5962-6921-2d5b-3f44-77c7a31933c9.png)
##### 移行先のサブアカウントとスペースを選択し「Create Migration」を押下
![スクリーンショット 2024-05-10 1829492.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/992234b2-7abe-50db-e368-45192f3942a2.png)
##### Migrationの名前を設定し、移行するデータベースの種類を選択する。
![スクリーンショット 2024-05-10 1830272.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/38aed4a7-f2df-d479-c0dc-42cfa4347473.png)
##### 移行元のBTPユーザIDとパスワードを入力
![スクリーンショット 2024-05-10 1831552.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/e626bdef-eb3f-5a50-22ec-a8c2926894de.png)
##### 移行元のスペースとHANAインスタンスを選択し、DBユーザとパスワードを入力
![スクリーンショット 2024-05-10 1835212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/ffb9f45c-7ec4-f012-3539-789d4b08c186.png)

##### DBユーザの権限不足によるエラー発生
![スクリーンショット 2024-05-10 1836232.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/2e9f0966-ffd6-ba1d-91e9-69624f42c886.png)

##### ログインユーザ自身に権限を付与することは出来ない為、別のユーザでログインしてから実行する必要がある。今回はSYSTEMユーザでログインし以下のSQLでORG_PLANに権限を付与
```sql
GRANT SELECT ON _SYS_REPO.DELIVERY_UNITS TO <username>;
GRANT SELECT ON _SYS_REPO.ACTIVE_OBJECT TO <username>; 
GRANT CATALOG READ TO <username>;
GRANT INIFILE ADMIN TO <username>;
GRANT TRUST ADMIN TO <username>;
GRANT CERTIFICATE ADMIN TO <username>;
GRANT CREATE REMOTE SOURCE TO <username>;
GRANT EXPORT TO <username>;
GRANT EXECUTE ON SYS.EXPORT_CATALOG_FOR_MIGRATION_DEV TO <username>;
DO BEGIN 
    SELECT * FROM PUBLIC.M_SERVICES WHERE SERVICE_NAME = 'diserver';
    IF ::ROWCOUNT != 0 
    THEN 
        EXEC 'CREATE LOCAL TEMPORARY TABLE #PRIVILEGES LIKE _SYS_DI.TT_API_PRIVILEGES'; 
        EXEC 'INSERT INTO #PRIVILEGES (PRINCIPAL_NAME, PRIVILEGE_NAME, OBJECT_NAME) SELECT ''<username>'', PRIVILEGE_NAME, OBJECT_NAME FROM _SYS_DI.T_DEFAULT_DI_ADMIN_PRIVILEGES';
        EXEC 'CALL _SYS_DI.GRANT_CONTAINER_GROUP_API_PRIVILEGES_WITH_GRANT_OPTION(''_SYS_DI'', #PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?)'; 
        EXEC 'DROP TABLE #PRIVILEGES'; 
        EXEC 'GRANT SELECT ON _SYS_DI.TT_API_PRIVILEGES to <username>'; 
        EXEC 'GRANT SELECT ON _SYS_DI.T_DEFAULT_CONTAINER_GROUP_ADMIN_PRIVILEGES to <username>'; 
        EXEC 'GRANT SELECT ON _SYS_DI.T_NO_PARAMETERS to <username>'; 
    END IF; 
END; 
GRANT SELECT ON SCHEMA _SYS_STATISTICS TO <username>;
GRANT SELECT ON SCHEMA _SYS_BI TO <username>;
GRANT SAP_INTERNAL_HANA_SUPPORT TO <username>; -- Only required when migrating SAP HANA databases in the Neo environment 
```


##### 権限付与後にリトライ
![スクリーンショット 2024-05-15 1201102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/860f9e2e-b76d-0353-13c4-105af67cde0f.png)

##### 互換性チェックが実行される
![スクリーンショット 2024-05-10 183832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/bd23ea22-20b2-a025-7046-5c4a6c1e8399.png)

##### 結果として `Critical` `Error` `Warning` `Info`の4つのレベルがあり、Criticalの場合は解消しなければ移行を行うことは出来ません。その他の場合は内容を確認し問題なければ先に進めることができます。
![スクリーンショット 2024-05-10 1859262.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/d29292c8-afe6-fbf7-694f-fd8480ea9a5b.png)


##### 移行ユーザとして前処理で設定したDBユーザを利用する場合は、YESを選択する。
![スクリーンショット 2024-05-10 1847572.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/8a760600-525f-4bd1-0904-916bdbceba76.png)


##### スキーマとHDIコンテナサービスインスタンスを移行する場合はYESを選択し、インスタンスの名(接頭辞・接尾辞)を設定する。
![スクリーンショット 2024-05-10 184839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/51360ad6-cf13-9fd4-0a4e-9b39e684f237.png)
##### 移行先のインスタンスを選択し、管理者パスワードを入力し移行を実行。<br>移行先と移行元でスペースが異なる場合、以下のようなエラーが発生。<br>スペースの共有設定を行う必要があります。
![スクリーンショット 2024-05-10 184946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/e3e044db-218e-e801-f7b3-0e0f0a3580b4.png)
### スペースの共有設定
##### HANA Cloud > HANA Cloud Central
![スクリーンショット 2024-05-10 1850382.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/d81eefb0-c8d8-2222-e709-75e30ffef502.png)

##### インスタンス名のリンクを押下
![スクリーンショット 2024-05-10 1851312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/f40e4438-b603-e8a4-39e3-71dcf449629a.png)

##### Create Mappingを押下
![スクリーンショット 2024-05-10 1852112.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/dc3cd156-40ad-b1a1-4c23-e7a9c053770b.png)


##### 対象のサブアカウント、スペースを選択し「Add」を押下<br>これでスペースの共有設定は完了です。
![スクリーンショット 2024-05-10 1852432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/15b9c646-d63d-a229-da38-f90d8a90887b.png)


##### スペース共有設定後に再度移行実行。<br>スキーマ単位で権限が不足している場合以下のようなエラーが発生するため。以下のSQLで権限を付与
```sql
GRANT SELECT ON SCHEMA <schemaname> TO <username>
```
![スクリーンショット 2024-05-10 1854322.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/f85d5d4b-dc12-77b0-bc85-b3b5fce57638.png)

##### スキーマ権限付与後に再度移行実行し移行作業正常終了
![スクリーンショット 2024-05-10 185548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/30e1bfb6-bdf4-bad8-fa99-633fa6f8124d.png)
##### 特に移行時に問題がなければNoneを選択し移行作業完了<br>移行ユーザを削除する場合は一番下のチェックボックスにチェックを入れる。
![スクリーンショット 2024-05-10 1857052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/e3f8334f-46b5-8ee3-cdf1-38a1f05cc26b.png)


##### 最後に、移行中に実行されたタスクの概要が表示される。
![スクリーンショット 2024-05-10 185807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3345291/756beb7a-d7fd-6966-3a12-26111b03fd7b.png)

## まとめ
今回は移行ツールを用いた、HANA Cloudへの移行手順を記載しました。途中で権限設定などを行う必要はありますが、手順に沿って進めれば特に難しいことはなく、スキーマやHDIコンテナなど一括で移行を行うことができ、最も効率の良い方法だと思われますので、HANA Cloudへの移行には移行ツールを利用することをオススメします。