目次
はじめに
通常、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
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[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
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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アドレス>
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[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)http://vertica-tech.ashisuto.co.jp/stop_start_database_admintools/
○コマンドラインによるadmintoolsの操作方法
http://vertica-tech.ashisuto.co.jp/admintools_commandline/
○データベースの停止、起動方法(Management Console)
http://vertica-tech.ashisuto.co.jp/mc_start_stop/
○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