OceanBaseデータベースは、テナントのロックをサポートしています。テナントがロックされると、そのテナントに新しい接続を作成することはできませんが、既存の接続は維持されます。本記事では、テナントのロックとロック解除の方法について説明します。
背景
ALTER TENANTステートメントを使用して、テナントのロックとロック解除を行います。これは、障害対応シナリオや運用保守における変更シナリオで適用されます。
障害対応:テナントに異常が発生し、現在修復中の場合、業務トラフィックが修復プロセスに影響を与えるのを避けるために、テナントをロックすることができます。この操作は、業務部門の同意を得た上で実施する必要があります。緊急時にテナントをロックした場合、ロック後は積極的にセッションをキルする必要があります。
運用保守による変更:例えば、テナントを停止する必要がある場合、停止プロセスではグレースフールドやロールバックなどの原則を保証する必要があります。テナントをロックすることをプロセスの一環として行い、業務システムへの影響を観察することができます。
注意
ロックとロック解除は必ずペアで使用してください。ロック解除を忘れた場合、新しい接続を確立できなくなります。
テナントのロック
rootユーザーでクラスタのsysテナントにログインします。obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに入ります。USE oceanbase;DBA_OB_TENANTSビューを使用して、テナント情報を確認します。テナント
mq_t1のロック状態を確認する例を示します:obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | NO | +-----------+-------------+--------+ 1 row in setDBA_OB_TENANTSビューの詳細については、DBA_OB_TENANTSを参照してください。ALTER TENANTステートメントを使用して、テナントをロックします。テナント
mq_t1をロックする例を示します。obclient [oceanbase]> ALTER TENANT mq_t1 LOCK; Query OK, 0 rows affectedALTER TENANTステートメントの詳細については、ALTER TENANTを参照してください。DBA_OB_TENANTSビューを確認し、テナントが正常にロックされたかどうかを確認します。obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | YES | +-----------+-------------+--------+ 1 row in set
テナントのロック解除
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに移動します。obclient [(none)]> USE oceanbase;DBA_OB_TENANTSビューで、テナント情報を確認します。テナント
mq_t1のロック状態を確認する例を示します:obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | YES | +-----------+-------------+--------+ 1 row in setDBA_OB_TENANTSビューの詳細については、DBA_OB_TENANTSを参照してください。ALTER TENANTステートメントを使用して、テナントのロックを解除します。テナント
mq_t1のロックを解除する例を示します:obclient [oceanbase]> ALTER TENANT mq_t1 UNLOCK; Query OK, 0 rows affectedALTER TENANTステートメントの詳細については、ALTER TENANTを参照してください。DBA_OB_TENANTSビューを確認し、テナントのロック解除が成功したかどうかを確認します。obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | NO | +-----------+-------------+--------+ 1 row in set