当前位置: 首页 > news >正文

KingbaseV8

KingbaseV8

文章目录

  • KingbaseV8
    • KES服务
      • 安装
      • 服务管理
    • 客户端命令行工具
      • 元命令
        • 资讯性
        • 连接
        • 输入输出
      • SQL命令
        • 角色(Role)
        • 用户(User)
        • 权限(Privilege)
        • 表空间(Tablespace)
        • 数据库(Database)
        • 模式(Schema)
        • 表(Table)
        • 索引(Index)
        • 视图(View)
    • 备份与还原
      • 逻辑备份
      • 物理备份

KES服务

安装

mkdir cd
sudo mount -o ro ./KingbaseES_V009R001C001B0025_Lin64_install.iso ./cd
sudo ./cd/setup.sh
# 在UI中安装,步骤略
# 金仓安装目录
export KINGBASE_HOME=/home/zhmh/Kingbase
# 将KES注册为Linux服务
sudo ${KINGBASE_HOME}/ES/V9/install/script/root.sh

为常用命令创建软连接:

# Server Command
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_ctl /usr/local/bin/sys_ctl
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_dump /usr/local/bin/sys_dump
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_restore /usr/local/bin/sys_restore
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_dumpall /usr/local/bin/sys_dumpall
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_rman /usr/local/bin/sys_rman# Client Command
sudo ln -s ${KINGBASE_HOME}/ES/V9/ClientTools/bin/ksql /usr/local/bin/ksql

服务管理

# 查看服务状态(systemd)
sudo systemctl status kingbased

使用金仓内置命令管理:

# sys_ctl {status | start | restart | reload | stop} [-D 数据目录] [-m {smart | fast | immediate}]# 查看服务状态(sys_ctl)
sys_ctl status -D ${KINGBASE_HOME}/ES/V9/data# Orexport KINGBASE_DATA=${KINGBASE_HOME}/ES/V9/data
sys_ctl status

客户端命令行工具

ksql 是 Kingbase 的交互式客户端工具。

# 查看帮助
export LANG=zh_CN.UTF-8
ksql --help
# ksql [OPTION]... [DBNAME [USERNAME]]
#
# 常规选项:
#   -c, --command=COMMAND    仅运行单个命令(SQL或内部)并退出
#   -d, --dbname=DBNAME      要连接的数据库名称
#   -f, --file=FILENAME      从文件执行命令,然后退出
#   -l, --list               列出可用数据库列表,然后退出
#   -v, --set=, --variable=NAME=VALUE
#
# 连接选项:
#   -h, --host=HOSTNAME      数据库服务器主机(默认: `localhost`)
#   -p, --port=PORT          数据库服务器端口(默认: `54321`)
#   -U, --username=USERNAME  数据库名称 (默认: `${USER}`)
#   -w, --no-password        不提示输入密码
#   -W, --password           强制提示输入密码
#   -C, --client-cert-path       证书路径
# 登录
ksql 'hostaddr=127.0.0.1 port=54321 user=SYSTEM dbname=test'
ksql -h 127.0.0.1 -p 54321 -U SYSTEM -d test
ksql -U SYSTEM -d test
ksql -USYSTEM -dtest
ksql test SYSTEM
# ksql kingbase://SYSTEM@127.0.0.1:54321/test
# Or
export KINGBASE_HOST=127.0.0.1
export KINGBASE_PORT=54321
export KINGBASE_DATABASE=test
export KINGBASE_USER=system
ksql
# 列出所有数据库
ksql test SYSTEM -l# 导入/从文件执行命令(非交互)
ksql test SYSTEM -f /tmp/xxx.sql# 执行单条SQL语句(非交互)
ksql test SYSTEM -c 'SELECT * FROM newtable';

元命令

ksql 提供了一组以\开头的快捷命令,称之为 ksql 元命令。

  • *? 通配符,用于提高查询效率
  • S 显示系统对象
  • + 其余的详细信息
# 查看帮助
\?
资讯性
# \d[S+]        列出表,视图和序列
# \l[+] [模式]  列出所有数据库
# 其它详见帮助
连接
# 当前连接信息
\conninfo# 显示或设置当前连接编码
\encoding [编码名称]# 更改用户密码
\password [USERNAME]
# 连接到新数据库
# \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}# 切换(需要再登录)
\c test SYSTEM 127.0.0.1 54321# 切换数据库和用户(需要再登录)
\c test SYSTEM# 切换用户(需要再登录)
\c - SYSTEM# 切换数据库
\c test
输入输出
# 更改目前的工作目录
\cd [目录]# 从文件执行命令
\i <FILE># 从文件执行命令(从当前脚本位置)
\ir <FILE># 逻辑导出(不依赖表空间)
\copy newtable to ./course.csv csv;

SQL命令

角色(Role)

将一组具有相同权限的用户组织在一起, 这一组具有相同权限的用户就称为角色。角色在生产系统中一般被视作用户组,利用角色对用户执行批量授权。

-- 查看已有角色及账户状态
SELECT * FROM DBA_ROLES
-- 查看已有角色及其权限
SELECT * FROM SYS_ROLES
-- 查看角色及其用户成员(元命令)
-- \du[S+] [模式] 列出角色-- 创建角色(注意不能和用户同名)
-- CREATE ROLE "name" [[WITH] 用户权限...]
CREATE ROLE "demo_role"-- 修改角色
-- ALTER ROLE "name" {[WITH] 用户权限... | RENAME TO "new_name"}
ALTER ROLE "demo_role" RENAME TO "new_name"-- 删除角色
-- DROP ROLE [IF EXISTS] "name"
DROP ROLE IF EXISTS "demo_role"
用户(User)

数据库用户代表数据库的使用者,通过定义和管理用户对资源的访问和操作权限,确保只有授权用户能进行合法操作,从而维护系统的完整性和保密性。

-- [用户权限]
--    [NO]SUPERUSER           -- 超级用户的权限
--    [NO]CREATEDB            -- 创建数据库的权限
--    [NO]CREATEROLE          -- 创建角色的权限
--    [NO]LOGIN               -- 登录数据库的权限(默认有)
--    [NO]REPLICATION         -- 允许发起流复制或者把系统放入或退出备份模式的权限
--    [NO]INHERIT             -- 自动继承父角色拥有的权限
--    [NO]BYPASSRLS           -- 角色是否会忽略表中的行级安全性
--    CONNECTION LIMIT -1     -- 限制连接数,-1为无限制
--    PASSWORD '******'       -- 设置密码
--    VALID UNTIL 'timestamp' -- 密码过期时间
--    [IN] ROLE "roles"       -- 当前用户加入这些角色
-- 查看已有用户及账户状态
SELECT * FROM DBA_USERS
-- 查看已有用户及其权限
SELECT * FROM SYS_USERS-- 创建用户(注意不能和角色同名)
-- CREATE USER "name" [[WITH] 用户权限...]
CREATE USER "demo_user" WITH SUPERUSER CONNECTION LIMIT -1 PASSWORD '123' ROLE "demo_role"-- 修改用户权限
-- ALTER USER "name" {[WITH] 用户权限... | RENAME TO "new_name"}
-- 修改用户名称
ALTER USER "demo_user" RENAME TO "new_name"
-- 修改用户权限
ALTER USER "demo_user" CREATEDB;
-- 修改用户密码
ALTER USER "demo_user" PASSWORD '456';
-- 修改用户的并发连接数
ALTER USER "demo_user" CONNECTION LIMIT 10;-- 将用户加入角色
-- GRANT "role" TO "user"[,...]-- 删除用户
-- DROP USER [IF EXISTS] "name"
DROP USER IF EXISTS "demo_user"
权限(Privilege)
-- 列出表,视图和序列的访问权限(元命令)
-- \dp [模式]-- 针对{数据库|模式|表空间|表}授权
-- GRANT {
--     {CREATE | CONNECT | TEMPORARY | TEMP}[, ...] | ALL [PRIVILEGES]
-- } ON {
--     DATABASE "database_name"[, ...] |
--     SCHEMA "schema_name"[, ...] |
--     TABLESPACE "tablespace_name"[, ...] |
--     [TABLE] "table_name"
-- } TO "role_or_user"[, ...] [WITH GRANT OPTION]
GRANT ALL PRIVILEGES ON DATABASE "test" TO "demo_role" WITH GRANT OPTION-- 撤销{数据库|模式|表空间|表}授权
-- REVOKE [GRANT OPTION FOR] {
--     {CREATE | CONNECT | TEMPORARY | TEMP}[,...] | ALL [PRIVILEGES]
-- }
-- ON {
--     DATABASE "database_name"[, ...] |
--     SCHEMA "schema_name"[, ...] |
--     TABLESPACE "tablespace_name"[, ...] |
--     [TABLE] "table_name"
-- }
-- FROM {[GROUP] "role_or_user" | PUBLIC}[,...] [CASCADE | RESTRICT]
REVOKE GRANT OPTION FOR ALL PRIVILEGES ON DATABASE "test" FROM "demo_role"
表空间(Tablespace)

表空间实际上就是给数据库对象(主要是表)指定一个操作系统文件夹。

-- 查看表空间(元命令)
-- \db[+] [PATTERN]-- 创建表空间
-- CREATE TABLESPACE tablespace_name
--     [ OWNER {new_owner | CURRENT_USER | SESSION_USER} ]
--     LOCATION 'directory'         -- 与表空间关联的文件系统的绝对路径。
--     [ ONLINE | OFFLINE ]         -- 离线状态时表空间将不能提供任何的读写服务
--     [ WITH (tablespace_option = value [,... ]) ]
CREATE TABLESPACE "demo" OWNER "SYSTEM" LOCATION '/data/tablespace/demo';-- 修改表空间
-- ALTER TABLESPACE "name" RENAME TO "new_name";
-- ALTER TABLESPACE "name" OWNER TO {"new_owner" | CURRENT_USER | SESSION_USER}
-- ALTER TABLESPACE name SET (tablespace_option = value [,... ])
-- ALTER TABLESPACE name RESET (tablespace_option [,... ])
-- ALTER TABLESPACE name {ONLINE | OFFLINE | READ WRITE | READ ONLY}-- 删除表空间:只能被超级用户或拥有者删除;删除前不能存在任何对象
-- DROP TABLESPACE [IF EXISTS] "name"
DROP TABLESPACE IF EXISTS "demo"
数据库(Database)

数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

-- 查看数据库[所有者,编码,权限,表空间](元命令)
-- \l+-- 创建数据库
-- CREATE DATABASE "name" [
--     [WITH] [ OWNER [=] user_name ]       -- 所有者
--     [ TEMPLATE [=] template ]            -- 创建模板
--     [ ENCODING [=] encoding ]            -- 编码
--     [ LC_COLLATE [=] lc_collate ]        -- 排序规则
--     [ LC_CTYPE [=] lc_ctype ]            -- 字符分类
--     [ TABLESPACE [=] tablespace_name ]   -- 表空间
--     [ ALLOW_CONNECTIONS [=] allowconn ]  -- 允许用户连接
--     [ CONNECTION LIMIT [=] connlimit ]   -- 连接限制
--     [ IS TEMPLATE [=] istemplate ]       -- 作为模板
-- ]
CREATE DATABASE "demo"-- 修改数据库名称
-- ALTER DATABASE "name" RENAME TO "new_name"
ALTER DATABASE "demo" RENAME TO "new_name"-- 修改数据库所有者
-- ALTER DATABASE "name" OWNER TO {"new_owner" | CURRENT_USER | SESSION_USER}-- 修改数据库表空间(移动到另一个表空间)
-- ALTER DATABASE "name" SET TABLESPACE "new_tablespace"-- 删除数据库
-- DROP DATABASE [IF EXISTS] "name"
DROP DATABASE IF EXISTS "name"
模式(Schema)

模式就是数据库对象的集合。

-- 列出所有模式(元命令)
-- \dn[S+] [模式]
\dn+-- 创建模式(将创建在当前所在数据库)
-- CREATE SCHEMA "schema_name" [AUTHORIZATION "role_specification"] [schema_element[...]]
-- CREATE SCHEMA AUTHORIZATION "role_specification" [schema_element[...]]
-- CREATE SCHEMA IF NOT EXISTS "schema_name" [AUTHORIZATION "role_specification"]
-- CREATE SCHEMA IF NOT EXISTS AUTHORIZATION "role_specification"
CREATE SCHEMA "schema_name" AUTHORIZATION "SYSTEM"-- 修改模式
-- ALTER SCHEMA "name" RENAME TO "new_name"
-- ALTER SCHEMA "name" OWNER TO {new_owner | CURRENT_USER | SESSION_USER}
ALTER SCHEMA "schema_name" RENAME TO "new_name"-- 删除模式
-- DROP SCHEMA [IF EXISTS] "name" [,...] [CASCADE | RESTRICT]
DROP SCHEMA IF EXISTS "schema_name"
表(Table)
-- 略
索引(Index)
-- 略
视图(View)
-- 创建视图
CREATE VIEW "public"."view1" AS (SELECT * FROM ...);-- 删除视图
DROP VIEW "public"."view1";

备份与还原

逻辑备份

  • sys_dump 支持细粒度备份。
  • sys_dumpall 强制备份整个数据库集簇中的数据,且只支持备份为SQL。
# sys_dump [OPTION]... [数据库名字]
# -f, --file=FILENAME   输出文件或目录名
# -F, --format=c|d|t|p  输出文件格式(c为dmp,d为目录,t为tar,p为sql(默认值))
# -Z, --compress=0-9    被压缩格式的压缩级别
# -j, --jobs=NUM        执行多个并行任务进行备份转储工作
# --lock-wait-timeout=TIMEOUT  在等待表锁超时后操作失败
# -a, --data-only              只转储数据,不包括模式
# -b, --blobs                  在转储中包括大对象
# -B, --no-blobs               排除转储中的大型对象
# -c, --clean                  在重新创建之前,先清除(删除)数据库对象
# -C, --create                 在转储中包括DDL命令,以便创建数据库
# -E, --encoding=ENCODING      转储以ENCODING形式编码的数据
# -n, --schema=PATTERN         只导出指定的模式
# -N, --exclude-schema=PATTERN 不导出指定的模式
# -s, --schema-only            只转储模式, 不包括数据
# -t, --table=PATTERN          只导出指定表
# -T, --exclude-table=PATTERN  不导出指定表
# -x, --no-privileges          不要转储权限 (grant/revoke)
# --inserts                    以INSERT命令,而不是COPY命令的形式转储数据
# -g, --fromSchema=NAME        恢复来自这个模式的对象,和-G一同使用
# -G, --toSchema=NAME          把对象恢复到这个模式,和-g一同使用
#                              目标模式和源模式的的数目应相同,或者只有一个目标# 备份test数据库的public模式为sql文件
sys_dump -U SYSTEM -d test -f /tmp/backup_public.sql -Fp -n public# 还原数据(原样)
sys_restore -U SYSTEM -d test /tmp/backup_public.sql -Fp -n public# 还原数据(新模式)
sys_restore -U SYSTEM -d test /tmp/backup_public.sql -Fp -g public -G public2
# sys_dumpall [OPTION]
# -h, --host=主机名     数据库服务器的主机名或套接字目录
# -p, --port=端口号     数据库服务器的端口号
# -U, --username=名字   以指定的数据库用户联接
# -f, --file=FILENAME   输出文件名
# -r, --roles-only          只转储角色,不包括数据库或表空间
# -t, --tablespaces-only    只转储表空间,而不转储数据库或角色
# -g, --globals-only        只转储全局对象, 不包括数据库
# -s, --schema-only         只转储模式, 不包括数据# 只备份自定义的角色
sys_dumpall -U SYSTEM -r -f /tmp/backup_roles.sql# 只备份自定义表空间
# CREATE TABLESPACE tbs01 LOCATION '/home/kingbase/dir01';
sys_dumpall -U SYSTEM -t -f /tmp/backup_tablespaces.sql# 同时备份自定义角色和自定义表空间
sys_dumpall -U SYSTEM -g -f /tmp/backup_globals.sql# 只备份所有对象的定义信息(不包含表的数据)。
sys_dumpall -U SYSTEM -s -f /tmp/backup_schema.sql

物理备份

# sys_rman

相关文章:

  • easyExcel单元格合并
  • 【TVM教程】microTVM TFLite 指南
  • C++11中的std::condition_variable
  • CCS编译器无法导入工程文件,检查原因是版本编译器编译问题
  • 自适应布局,平均分配,自动换行,上下对齐
  • 大模型相关面试问题原理及举例
  • java+postgresql+swagger-多表关联insert操作(九)
  • 【Scratch编程入门】字母动画制作
  • NHANES指标推荐:CMI
  • LLaMA Factory多模态微调实践:微调Qwen2-VL构建文旅大模型
  • 《奇迹世界起源》:神之月晓活动介绍!
  • YRAN定义
  • Enovia许可证管理与监控工具
  • 对WAV文件进行降噪
  • 51、项⽬中的权限管理怎么实现的
  • k8s介绍与实践
  • 【AI提示词】儿童看护员
  • 【嵌入式】【阿里云服务器】【树莓派】学习守护进程编程、gdb调试原理和内网穿透信息
  • css图片设为灰色
  • Allure测试报告按测试终端和测试类型智能分类查看
  • 成都一医院孕妇产下七胞胎?涉事医院辟谣:信息不实已举报
  • 经济日报:从三个变化看外贸破局之道
  • 刘国梁:奥运会乒乓球项目增至六金,国乒机遇与挑战并存
  • 杜甫、韦应物背后的世家大族,在这个展览上一览传奇
  • 非法收受财物2.29亿余元,窦万贵受贿案一审开庭
  • 同程旅行:拟24.97亿元收购万达酒管100%股权