VexDB

功能描述

vexdb是 VexDB数据库的主线程,也是一个可执行的命令,能够通过其启动一个数据库线程。

客户端应用程序为了访问数据库,将连接(通过网络或本地)到一个正在运行的VexDB线程。然后该线程实例会启动一个独立的线程来处理这个连接。

说明
通过vexdb启动数据库时,需要再开一个窗口来连接到数据库,也可以使用&符号使程序在后台执行。

一个 vexdb线程总是管理来自同一个数据库的数据。一个系统上可以同时运行多个 vexdb线程,只要使用不同的数据目录和不同的端口号。 vexdb启动时需要知道数据目录的位置,该位置必须通过-D指定。通常,-D直接指向由 vb_initdb 创建的数据库目录。

缺省时 vexdb在前台启动并将日志信息输出到标准错误。但在实际应用中,vexdb应当作为后台进程启动,而且多数是在系统启动时自动启动。

vexdb还能以单用户模式运行,这种用法主要用于vb_initdb 的初始化过程中,有时候也被用于调试灾难性恢复。不过,单用户模式运行的服务器并不适合于调试,因为没有实际的进程间通讯和锁动作发生。

当从shell上以单用户模式调用时,用户可以输入查询,然后结果会在屏幕上以一种更适合开发者阅读(不适合普通用户)的格式显示出来。在单用户模式下,将把会话用户ID设为1并赋予系统管理员权限。该用户不必实际存在,因此单用户模式运行的服务器可以用于对某些意外损坏的系统表进行手工恢复。

数据库正常启动时,不能通过 single 单用户模式登录。

语法格式

vexdb [OPTION]...

参数描述

通用选项

表1 通用选项

参数 参数说明 取值范围
-B NBUFFERS 设置服务器线程使用的共享内存缓冲区的数量。 -
-b BINARY UPGRADES binary upgrade 标志。 -
-c NAME=VALUE 给一个正在运行的参数赋值。 可以同时指定多个-c 从而设置多个参数。 -
-C NAME 打印一个命名的运行时的参数的值然后退出。可以用在正在运行的服务器上,从 postgresql.conf 返回值。 postgresql.conf 中的所有参数。
-d 1-5 设置调试级别,1-5记录对应 debug 级别信息。级别越高,写到服务器日志的调试输出越多。 取值范围:1-5 说明:如果取值小于等于0,则只会记录 notice 级别的信息。
-D DATADIR 声明数据目录或者配置文件的文件系统路径。 用户自定义路径。
-e 把缺省日期风格设置为“European”,也就是说用 DMY 规则解释日期输入,并且在一些日期输出格式里日在月份前面打印。 -
-F 关闭 fsync 调用以提高性能,但是要冒系统崩溃时数据毁坏的风险。声明这个选项等效关闭了 fsync 参数。 -
-h HOSTNAME 指定 VexDB 侦听来自前端应用 TCP/IP 连接的主机名或 IP 地址。 前端存在的主机名或 IP 地址。
-i 该选项允许远程客户通过 TCP/IP(网际域套接字)与服务器通讯。 -
-k DIRECTORY 指定 VexDB 侦听来自前端应用连接的 Unix 域套接字的目录。 缺省通常是/tmp ,但是可以在编译的时候修改。
-l 该选项允许远程客户通过 SSL( 安全套接层)与服务器通讯。 -
-N MAX-CONNECT 设置服务器接受的客户端连接的最大数。缺省时由 vb_initdb 自动选择。声明这个选项等价于声明 max_connections 配置参数。 取值范围:正整数。
-M SERVERMODE 在启动时指定数据库的启动模式。 SERVERMODE 可以取下面四个值:
  • primary:本端以主机模式启动。
  • standby:本端以备机模式启动。
  • pending:本端处于等待状态,等待提升为主机或者备机。
-o OPTIONS 向每个服务器进程传递 "OPTIONS"。该选项仅保留语法,没有实际功能。 -
-p PORT 指定 VexDB 侦听客户端连接的 TCP/IP 端口或本地 Unix domain socket 文件的扩展。默认端口号为15400。 正整数,在操作系统支持的端口范围内。
-s 在每条命令结束时打印时间信息和其他统计信息。 -
-S WORK-MEM 声明内部排序和散列在求助于临时磁盘文件之前可以使用的内存大小。 单位为 KB。
-u NUM 指定升级前数据库内核版本号。 -
-V, --version 打印 vexdb 工具的版本信息然后退出。 -
--NAME=VALUE 给一个正在运行的参数赋值。 -
--describe-config 描述配置参数然后退出。 -
--securitymode 以安全模式运行。
说明
在安全模式下,不允许执行 COPY TO/FROM filename,不允许对 public 角色授权,不允许创建和修改表空间,用户需要具有 USEFT 属性,才能创建、修改、删除和使用外表。
-
--single_node 拉起单机数据库。这是默认选项。 -
-?, --help 显示关于 VexDB 命令行参数的帮助信息,然后退出。 -

开发者选项

下表参数主要是便于开发人员调试使用,有时也用于帮助恢复严重损坏的数据库。在应用程序使用数据库提供服务时,请不要使用这些参数进行调试。

表2 开发者选项

参数 参数说明 取值范围
-f s|i|n|m|h 禁止某种扫描和连接方法的使用。 取值范围:
  • s:关闭顺序
  • i:索引扫描
  • n:关闭嵌套循环
  • m:融合(merge)连接
  • h:Hash 连接
-n 主要用于调试导致服务器进程异常崩溃的问题。一般策略是通知所有其他服务器进程终止并重新初始化共享内存和信号灯。该选项指定 vexdb 不重新初始化共享内存。 -
-O 允许修改系统表的结构。 -
-P 读系统表时忽略系统索引,但在修改表时仍然更新索引。 须知:此选项可能导致系统表损坏, 甚至数据库无法启动。 -
-t pa|pl|ex 打印与每个主要系统模块相关的查询记时统计。 -
-T 主要用于调试导致服务器进程异常崩溃的问题。该选项指定 vexdb 通过发送 SIGSTOP 信号停止其他所有服务器进程,但是并不让它们退出。这样就允许系统程序员手动从所有服务器进程搜集内核转储。 -
-W NUM 指定一个新的服务器进程开始需要等待的秒数。 单位:秒
--localxid 使用本地事务 ID,而不是全局事务 ID。 须知:此选项仅用于 vb_initdb。使用此选项可能会导致数据库不一致。 已存在的本地事务 ID

单用户模式选项

表3 单用户模式选项

参数 参数说明 取值范围
--single 启动单用户模式。必须是命令行中的第一个选项。 -
DBNAME 要访问的数据库的名称。必须是命令行中的最后一个选项。 字符串。默认为用户名。
-d 0-5 重新指定调试级别。 0-5
-E 回显所有命令。 -
-j 禁止使用新行作为语句分隔符。 -
-r FILENAME 将所有服务器标准输出和标准错误保存到文件 filename 中。 -

自启动模式选项

表4 自启动模式选项

参数 参数说明 取值范围
--boot 启动自启动模式。必须是命令行中的第一个选项。该参数是对数据库中的参数变量及相关配置初始化,常用在数据库安装的流程中,直接使用该参数,无明显行为感知。 -
-r FILENAME 将所有服务器标准输出和标准错误保存到文件 filename 中。 -
-x NUM 指定一个新的服务器线程的类型。在初始化数据库时,会用到自启动模式,通过设置这个参数,启动不同线程来执行一些逻辑,正常情况下,不会用到,因为自启动模式很少会用到。 0-5
-G 在 initdb 时将表存储在段页中。

错误处理

一个提到了 semget 或 shmget 的错误信息可能意味着需要重新配置内核,提供足够的共享内存和信号灯。可以通过降低 shared_buffers 值以减少 VexDB的共享内存的消耗,或者降低 max_connections 值减少 VexDB的信号灯的消耗。

如果发现类似“另外一个服务器正在运行”的错误信息,可以根据系统使用不同的命令:

ps ax | grep vexdb

ps -ef | grep vexdb

如果确信没有冲突的服务器正在运行,可以删除消息里提到的锁文件然后再次运行。

无法绑定端口的错误信息可能表明该端口已经被其他非 vexdb进程使用。如果终止 vexdb后又马上用同一端口号运行它,也可能得到错误信息。这时,必须多等几秒,等操作系统关闭了该端口再试。最后,如果使用了一个操作系统认为是保留的端口,也可能导致这个错误信息。例如:Unix版本认为低于1024的端口号是“可信任的”,因而只有Unix系统管理员可以使用它们。

说明
  • 使用SIGKILL杀死主进程会阻止vexdb前释放它持有的系统资源(例如共享内存和信号灯),会影响新的进程。
  • 可以使用SIGTERM,SIGINT,SIGQUIT信号正常结束服务器进程。第一个信号将等待所有的客户端退出后才退出。第二个将强制断开所有客户端,而第三个将不停止立刻退出,导致在重启时的恢复运行。
  • 信号SIGHUP将会重新加载服务器配置文件。它也可能给单个服务器进程发送SIGHUP信号,但是这通常是不明显的。
  • 要取消一个正在执行的查询,向正在运行的进程发送SIGINT信号。

用法

示例1: 当数据库无法正常启动时,切换进入数据库安装目录下使用单用户模式登录数据库。

1、切换到数据库安装目录下的bin目录下,当安装为标准化安装时,路径如下:

cd ~/local/vexdb/bin

2、使用单用户模式登录。

vexdb --single -D ~/data/vexdb vexdb
  • 用-D给服务器提供正确的数据库目录的路径。同时还要声名已存在的特定数据库名称。
  • 通常,独立运行的服务器把换行符当做命令输入完成字符;要想把一行分成多行写,必需在除最后一个换行符以外的每个换行符前面敲一个反斜杠。
  • 如果使用了-j命令行选项,新行将不被当作命令结束符。此时服务器将从标准输入一直读取到EOF标志为止,然后把所有读到的内容当作一个完整的命令字符串看待,并且反斜杠与换行符也被当作普通字符来看待。
  • 输入EOF(Control+D)即可退出会话。如果已经使用了-j则必须连续使用两个EOF才行。
  • 单用户模式运行的服务器不会提供复杂的行编辑功能(比如没有命令历史)。单用户模式也不会做任何后台处理,像自动检查点。

示例2: 用缺省值在后台启动vexdb。

nohup vexdb> logfile 2>&1 < /dev/null &

需要帮助?

扫码添加企业微信
获得专业技术支持

企业微信二维码
🎯 快速响应💡 专业解答