OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

コマンドラインからデータベースを即時停止する方法

公開日:
更新日:
基本操作
#起動
#停止

はじめに

通常、Vertica のデータベース停止操作をした場合、ユーザセッションが存在すると NOTICE 2519 が発生し、操作が中断されます。
この記事では、ユーザの接続有無に関わらず即時にデータベースを停止する方法をご紹介します。

※通常のデータベースの停止方法は以下の記事をご参照ください。

データベースの停止、起動方法(admintools)
コマンドラインによるadmintoolsの操作方法
データベースの停止、起動方法(Management Console)

前提事項

データベースを即時停止した場合、実行中の SQL は停止され、未 COMMIT の操作は自動的にロールバックされます。
また、データベース停止時に自動的に Moveout 処理が実行されるため、COMMIT 済みの情報は保証されます。

なお、ユーザの SQL 実行完了まで待機したうえでデータベースを停止するコマンドやオプションはありません。

※Moveout の詳細は、以下の記事をご参照ください。
MoveoutとMergeout

即時停止する方法:コマンドライン+admintools 編

コマンド構文

OS の dbadmin ユーザから、以下のコマンドを実行します。

admintools -t stop_db -d <データベース名> [-p <パスワード>] -F

コマンドラインから実行する admintools コマンドの詳細はマニュアルをご参照ください。
Writing Administration Tools Scripts

実行例

[dbadmin]$ admintools -t list_allnodes

 Node             | Host            | State | Version         | DB
------------------+-----------------+-------+-----------------+-------
 v_kkadb_node0001 | xxx.xxx.xxx.xxx | UP    | vertica-9.1.1.1 | kkadb
 v_kkadb_node0002 | xxx.xxx.xxx.xxy | UP    | vertica-9.1.1.1 | kkadb
 v_kkadb_node0003 | xxx.xxx.xxx.xxz | UP    | vertica-9.1.1.1 | kkadb


[dbadmin]$ admintools -t stop_db -d kkadb -p xxxxxx -F

        Connecting to database
        Issuing shutdown command to database
Database kkadb stopped successfully


[dbadmin]$ admintools -t list_allnodes

 Node             | Host            | State | Version         | DB
------------------+-----------------+-------+-----------------+-------
 v_kkadb_node0001 | xxx.xxx.xxx.xxx | DOWN  | vertica-9.1.1.1 | kkadb
 v_kkadb_node0002 | xxx.xxx.xxx.xxy | DOWN  | vertica-9.1.1.1 | kkadb
 v_kkadb_node0003 | xxx.xxx.xxx.xxz | DOWN  | vertica-9.1.1.1 | kkadb

即時停止する方法:vsql 編

コマンド構文

vsql にて dbadmin ユーザに接続し、以下のコマンドを実行します。

SELECT SHUTDOWN(‘オプション’);

指定可能なオプション

指定可能なオプションは以下の通りです。

オプション

説明

備考

true

接続ユーザが存在する場合でも、データベースの停止操作を実行する

即時停止の場合はこちらのオプションを使用

false

接続ユーザが存在する場合、メッセージが表示され、停止操作を中断する

デフォルト動作

SHUTDOWN コマンドの詳細はマニュアルをご参照ください。
Database Management Function – SHUTDOWN

実行例

dbadmin=> select node_name, node_state, node_address from nodes;

    node_name     | node_state | node_address
------------------+------------+--------------
 v_kkadb_node0001 | UP         | xxx.xxx.xxx.xxx
 v_kkadb_node0002 | UP         | xxx.xxx.xxx.xxy
 v_kkadb_node0003 | UP         | xxx.xxx.xxx.xxz
(3 rows)


dbadmin=> select SHUTDOWN('true');

          SHUTDOWN
----------------------------
 Shutdown: moveout complete
(1 row)


dbadmin=> select node_name, node_state, node_address, last_msg_from_node_at, node_down_since from nodes;

ERROR 6876:  No nodes up!
FATAL 4748:  Shutdown in progress. No longer accepting connections
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

!>

強制停止する方法

上記の即時停止コマンドが実行できない場合やハングが疑われる場合は、以下のコマンドを実行します。

コマンド構文

OS の dbadmin ユーザから、以下のコマンドを実行します。

admintools -t stop_node -s <ホスト名/IPアドレス>

実行例

[dbadmin]$ admintools -t list_allnodes

 Node             | Host            | State | Version         | DB
------------------+-----------------+-------+-----------------+-------
 v_kkadb_node0001 | xxx.xxx.xxx.xxx | UP    | vertica-9.1.1.1 | kkadb
 v_kkadb_node0002 | xxx.xxx.xxx.xxy | UP    | vertica-9.1.1.1 | kkadb
 v_kkadb_node0003 | xxx.xxx.xxx.xxz | UP    | vertica-9.1.1.1 | kkadb


[dbadmin]$ admintools -t stop_node -s xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxy,xxx.xxx.xxx.xxz

*** Forcing host shutdown ***
        Sending host shutdown command to 'xxx.xxx.xxx.xxx'
        Sending host shutdown command to 'xxx.xxx.xxx.xxy'
        Sending host shutdown command to 'xxx.xxx.xxx.xxz'


[dbadmin]$ admintools -t list_allnodes

 Node             | Host            | State | Version         | DB
------------------+-----------------+-------+-----------------+-------
 v_kkadb_node0001 | xxx.xxx.xxx.xxx | DOWN  | vertica-9.1.1.1 | kkadb
 v_kkadb_node0002 | xxx.xxx.xxx.xxy | DOWN  | vertica-9.1.1.1 | kkadb
 v_kkadb_node0003 | xxx.xxx.xxx.xxz | DOWN  | vertica-9.1.1.1 | kkadb

コマンド補足

“stop_node”コマンドは、vertica プロセスに対し SIGTERM シグナルを送信し、プロセスを停止します。
この時、自動的に Moveout 処理が実行されるため、COMMIT済みの情報は保証されます。
また、実行例では全ノードを停止していますが、特定のノードのみを停止することも可能です。

注意事項

“stop_node”コマンドの他に”kill_node”コマンドが存在しますが、こちらは vertica プロセスに対し SIGKILL シグナルを送信し、プロセスを停止します。
Moveout 処理が実行されないため、データの不整合が発生する可能性があります。
必要な場合を除き、こちらのコマンドの実行は推奨しません。

参考情報

○データベースの停止、起動方法(admintools)
https://www.ashisuto.co.jp/cm/analytics-database/stop_start_database_admintools.html

○コマンドラインによるadmintoolsの操作方法
https://www.ashisuto.co.jp/cm/analytics-database/admintools_commandline.html

○データベースの停止、起動方法(Management Console)
https://www.ashisuto.co.jp/cm/analytics-database/mc_start_stop.html

○Writing Administration Tools Scripts
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/AdminTools/WritingAdministrationToolsScripts.htm

○Database Management Function – SHUTDOWN
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/VerticaFunctions/SHUTDOWN.htm

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。