人大金仓数据库KingbaseES KES中DUMP功能的EXISTS选项使用及说明

本文详细解释了在人大金仓的KingbaseES(KES)中,sys_dump工具如何备份数据库,包括参数使用、EXISTS选项的处理,以及在MySQL模式下的特性和注意事项。重点强调了sys_dump生成的SQL脚本与用户操作的区分,特别是IFEXISTS和IFNOTEXISTS的处理方式。
摘要由CSDN通过智能技术生成

关键字:、人大金仓、KingbaseES、dump

概述

在KES中,sys_dump可以将指定数据库备份为一个归档文件,通常为*.sql文件。它可以创建一致的备份,同时不阻塞其他用户访问数据库。在使用sys_dump来备份数据库时,根据原数据库中的对象将会根据使用EXISTS选项的方式不同,sys_dump在归档文件中会生成不同的脚本语句,通常为可执行的SQL语句。

sys_dump的常用参数

调用sys_dump的语法格式:

sys_dump [ option ...]

sys_dump涉及的option参数说明:

-a

只转储数据,而不转储模式(数据定义)。表数据、大对象和序列值都会被转储。

-C

该命令使得在输出的开始是创建数据库,并且重新连接到被创建的数据库(使用这种形式的脚本,在运行脚本之前连接的是目标安装中的哪个数据库都没有关系)。如果还指定了 --clean ,脚本会在重新连接之前删除并重建目标数据库。

-E encoding

以指定的字符集编码创建转储。默认情况下,转储会以数据库的编码创建(另一种得到相同结果的方式是将 KCICLIENTENCODING 环境变量设置成想要的转储编码)。

-f file

将输出发送到指定文件。对于基于输出格式的文件,这个参数可以被忽略,在这种情况下将使用标准输出。但是,对于目录输出格式必须给定这个参数,在目录输出格式中指定的是一个目录而不是一个文件。在这种情况中,该目录会由 sys_dump 创建,并且之前不能存在。

-O

不输出设置对象拥有关系来匹配原始数据库的命令。默认情况下,sys_dump 会发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句来设置被创建的数据库对象的拥有关系。

-V --version

打印 sys_dump 版本并退出。

--disable-dollar-quoting

这个选项禁止在函数体中使用美元符号引用,并且强制它们使用 SQL 标准字符串语法进行引用。

--if-exists

时间条件性命令(即增加一个 IF EXISTS 子句)来清除数据库和其他对象。 只有同时指定了 --clean 时,这个选项才可用。

--include-all-partitions[=opt]

仅在Oracle模式下生效。通过配置该参数值,控制在单独备份分区表时,是否同时备份该分区表下所有分区的结构和数据。 可选参数值有:1,0,t,f,on,off, 默认值为1。 当include-all-partitions=1/t/on时,指定 -t 参数导出分区表的主表时,自动导出所有子表; 当include-all-partitions=0/f/off时,指定 -t 参数导出分区表的主表时,不自动导出所有子表。

--no-comments

不转储注释。

-? --help

显示有关 sys_dump 命令行参数的帮助并退出。

-d dbname --dbname=dbname

指定要连接到的数据库名。这等效于指定 dbname 为命令行上的第一个非选项参数。

-h host --host=host

指定服务器正在运行的机器的主机名。如果该值开始于斜线,则将其用作 Unix 域套接字的目录。默认值取自 KINGBASE_HOST 环境变量(如果设置了),否则将尝次 Unix 域套接字连接。

-p port --port=port

指定服务器正在监听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认是放在 KINGBASE_PORT 环境变量中(如果设置了),否则使用编译在程序中的默认值。

-U username --username=username

要作为哪个用户连接。

-w --no-password

不发出密码提示。如果服务器要求密码验证,并且密码不能通过其他方式获得(例如一个 .kbpass 文件),那么连接尝试将失败。这个选项对于在没有用户输入密码的批处理任务和脚本中有用。

-W --password

强制 sys_dump 在连接到一个数据库之前提示输入密码。

--role=rolename

指定用来创建转储的角色名。

sys_dump的EXISTS选项

在KES的mysql模式下,在CREATE和 ALTER和DROP相关语法内部分别增加了对IF NOT EXISTS子句和IF EXISTS子句的处理,不影响现有的功能以及备份还原、升级的兼容性。

在KES中,sys_dump直接导出的mysql模式的数据库的sql文件里不会存在IF NOT EXISTS语句或IF EXISTS语句,其只会记录数据库当前的状态,不包含用户的具体操作。

例:

  1. 在KES中先创建一个表

test=# create table if not exists tt1 (i int);

CREATE TABLE

  1. 查看dump后的sql文件,相关内容如下。显然if not exists语句并不会体现在dump生成的sql文件中。

-- Name: tt1; Type: TABLE; Schema: public; Owner: gaichao

CREATE TABLE public.tt1 (

i integer

);

ALTER TABLE public.tt1 OWNER TO gaichao;

  1. 红底为在文档中查找相关内容,不管是创建对象时是否添加if not exists语句、更改对象时是否添加if exists语句、删除对象时是否添加if exists语句(被删除的对象不会出现在sql文件中),这些用户的操作都不会体现在用户文件中。

E486: Pattern not found: if exists

E486: Pattern not found: if not

在KES中,用sys_dump来导出mysql模式的数据库,在导出时也不会包含和对象相关的DDL语句中的EXISTS选项。但是如果是PLSQL层面,如果用户在定义的函数中(不是定义函数时)使用了EXISTS选项,则导出的sql文件中会包含该EXISTS选项。

例:

在KES中,sys_dump导出的sql文件时,如果使--clean --if-exists选项,则生成的归档文件里会存在IF EXISTS语句,其主要用于恢复表时先判断表是否存在,当表存在时,会先删除现有的表,并按照sql文件内容恢复一个新的表。但是用户自己用if not exists创建的对象或者用if exists修改或删除的对象也不会体现在dump生成的sql文件中,即sys_dump生成的sql文件中的if exists语句和用户行为无关,是系统预先设计好的规则。

例:在使用sys_dump时添加--clean --if-exists选项后,生成的归档文件会先尝试删除当前数据库的同名对象:

temp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值