人大金仓数据库KingbaseES逻辑备份还原介绍

关键字

KingbaseES、备份还原、逻辑备份、人大金仓

概述

计算机系统不可避免地会发生内部故障、系统故障、硬件故障等问题,这些问题会造成数据库中的事务非正常停止,或部分数据丢失,因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的备份与恢复。

KingbaseES 提供的备份恢复方式可以分为两种:一种是基于日志的物理备份恢复,另一种基于SQL语句的逻辑备份还原。物理备份恢复和逻辑备份还原都是各自采用了不同的技术手段来达到保护数据的目的。基于日志的物理备份恢复和基于SQL语句的逻辑备份还原各有特点,适用于不同的场合,没有直接的好坏之分。。

备份还原的方式

物理备份还原

物理备份还原指的是通过备份集和归档日志将数据库转化为历史状态的过程,KingbaseES通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据,sys_rman工具属于物理备份还原。

逻辑备份还原

逻辑备份还原指的是利用备份的数据库对象把数据库从一个快照转化到另一个快照的过程(数据库在某个时刻的一个状态称为一个快照)。KingbaseES提供数据库对象的联机逻辑备份还原功能,备份对象包括:数据库、模式、表、视图、约束、权限、触发器、函数、序列。

KingbaseES提供相关命令完成逻辑备份与还原功能。

逻辑备份主要支持导出整个实例、指定库、指定模式、指定表等几种导出的方式,借助sys_dumpall可以导出整个实例或角色表空间等定义和数据,借助sys_dump可以导出指定数据库的所有对象定义和内容,也可以导出指定模式或指定表的对象定义和内容。

逻辑备份还原实战(sys_dump)

简介

sys_dump 是用于备份 KingbaseES 数据库的工具,可将数据库备份为脚本文件或其他归档文件。即使数据库正在并发使用,也能创建一致的备份。sys_dump 不阻塞其他用户访问数据库(读取或写入)。

sys_dump 只备份单个数据库。要备份整个集簇,或备份集簇中所有数据库公共的全局对象(例如角色和表空间),请使用 sys_dumpall 。

脚本输出是包含 SQL 命令的纯文本文件,可以使用该脚本将数据库恢复到备份时的状态,请使用 ksql 。 即使在其他机器和其他架构上,脚本文件也可用于恢复数据库。

归档文件格式输出可与 sys_restore 配合使用来恢复数据库。允许 sys_restore 选择要恢复的内容,并且可以在恢复之前对条目重排序。归档文件格式旨在跨架构迁移。

sys_dump 可用于备份整个数据库,而 sys_restore 可用于检查归档并选择要恢复数据库的哪些部分。最灵活的输出文件格式是“自定义”格式( -Fc )和“目录”格式( -Fd )。允许选择和重排序所有已归档项,支持并行恢复,并且默认是压缩的。“目录”格式是唯一支持并行转储的格式。

当运行 sys_dump 时,请检查输出是否有任何警告(打印在标准错误上)。

命令行参数

sys_dump [ connection-option ...] [ option ...] [ dbname ]

参数说明

下列命令选项控制输出的内容和格式。

dbname:

指定要转储的数据库名。如果没有指定,将使用环境变量 KINGBASE_DATABASE 。如果环境变量也没有设置,则使用指定给该连接的用户名。

-a --data-only:

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

这个选项类似于指定 --section=data ,但是由于历史原因又不完全相同。

-b –blobs:

在转储中包括大对象。这是默认行为,除非指定了 --schema 、 --table 或 --schema-only 。因此,只有在请求转储一个特定方案或者表的情况中, -b 开关才对向转储中加入大对象有用。请注意,blobs是被视为数据,因此在使用 --data-only 时将包括在内,但在使用 --schema-only 时则不会包括。

-B --no-blobs:

排除转储中的大对象。

当同时给定 -b 和 -B 时,行为是输出大对象,当数据被转储时,请参考 -b 文档。

-c –clean:

在输出创建数据库对象的命令之前,输出清除(删除)它们的命令(除非还指定了 --if-exists ,否则如果目标数据库中不存在任何对象,恢复可能会产生一些无害的错误消息)。

这个选项只对纯文本格式有意义。对于归档格式,您可以在调用 sys_restore 时指定该选项。

-C –create:

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

使用 --create 时,输出还会包括数据库的注释(如果有)以及与这个数据库相关的配置变量的设置,也就是任何提到了这个数据库的 ALTER DATABASE ... SET ... 命令和 ALTER ROLE ... IN DATABASE ... SET ... 命令。除非指定有 --no-acl ,否则该数据库本身的访问特权也会被转储。

这个选项只对纯文本格式有意义。对于归档格式,您可以在调用 sys_restore 时指定这个选项。

-E encoding --encoding=encoding:

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

-f file --file=file:

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

-F format --format=format:

选择输出的格式。 format 可以是下列之一:

p plain:

输出一个纯文本形式的 SQL 脚本文件(默认值)。

c custom:

输出一个适合于作为 sys_restore 输入的自定义格式归档。和目录输出格式一起,这是最灵活的输出格式,它允许在恢复时手动选择和排序已归档的项。默认情况下,此格式也是压缩的。

d directory:

输出一个适合作为 sys_restore 输入的目录格式归档。这将创建一个目录,其中每个被转储的表和大对象都有一个文件,外加一个所谓的目录文件,该文件以一种 sys_restore 能读取的机器可读格式描述转储的对象。可以使用标准 Unix 工具操作目录格式归档,例如一个未压缩归档中的文件可以使用gzip工具压缩。这种格式默认是压缩的,也支持并行转储。

t tar:

输出一个适合于输入到 sys_restore 中的 tar 格式归档。 tar 格式可以兼容目录格式,抽取一个 tar 格式的归档会产生一个合法的目录格式归档。但是 tar 格式不支持压缩。此外,在使用 tar 格式时,表数据项的相对顺序不能在恢复过程中被更改。

--feedback=NUM:

该参数用来指明在 sys_dump 导出表数据的过程中每间隔多少行打印一次进度信息,默认为零只打印导出表的总行数,和 -v 参数共用时才会打印。

注意:

在 sys_dump 执行单表并行导出时,被拆分到每个子进程的同表不同块的数据会被当做单独的表来显示进度。

-j njobs --jobs=njobs:

通过同时归档 njobs 表来运行并行转储。这个选项缩减了转储的时间,但是它也增加了数据库服务器上的负载。您只能和目录输出格式一起使用这个选项,因为这是唯一一种让多个进程能在同一时间写其数据的输出格式。

sys_dump 将打开 njobs + 1 个到该数据库的连接,因此请确保您的 max_connections 设置地足够高,可以容纳所有的连接。

在运行一次并行转储时请求数据库对象上的排他锁可能导致转储失败。其原因是, sys_dump 主控进程会在工作者进程将要稍后转储的对象上请求共享锁,以便确保在转储运行时不会有人删除它们并让它们出错。如果另一个客户端接着请求一个表上的排他锁,那个锁将不会被授予,但是会被排入队列等待主控进程的共享锁被释放。因此,任何其他对该表的访问将不会被授予,并且将在排他锁请求之后排队。这包括尝试转储该表的工作者进程。如果没有任何防范措施,这可能会是一种经典的死锁情况。要检测这种冲突, sys_dump 工作者进程使用 NOWAIT 选项请求另一个共享锁。如果该工作者进程没有被授予这个共享锁,那么肯定是其他进程同时请求了一个排他锁,并且没有办法继续转储,因此 sys_dump 除了中止转储之外别无选择。

对于一致的备份,数据库服务器需要支持同步快照,这是在 KingbaseES 的主服务器和后备服务器中引入了一种特性。有了这种特性,即便数据库客户端使用不同的连接,也可以保证他们看到相同的数据集。 sys_dump -j 使用多个数据库连接,它用主控进程连接到数据一次,并且为每一个工作者任务再一次连接数据库。如果没有同步快照特征,在每一个连接中不同的工作者任务将不能被保证看到相同的数据,这可能导致一个不一致的备份。

如果要运行 KingbaseES 之前的服务器的并行转储,您需要确保从主控进程连接到数据库一直到最后一个工作者任务连接到数据库之间,数据库内容不会发生改变。做这些最简单的方法是在开始备份之前停止任何访问数据库的数据修改进程(DDL和 DML)。当对 KingbaseES 之前版本的 KingbaseES 服务器运行 sys_dump -j 时,还需要指定 --no-synchronized-snapshots 参数。

--no-synchronized-snapshots:

在并行工作集中不使用同步快照。

-K --key=encryptkey:

备份数据时候指定加密秘钥。1.秘钥长度不能超过16字节。2.不能和压缩同时使用。3.只能用于二进制格式输出。

-n pattern --schema=pattern:

只转储匹配 pattern 的模式,这会选择模式本身以及它所包含的所有对象。当没有指定这个选项时,目标数据库中所有非系统模式都将被转储。多个模式可以通过书写多个 -n 开关来选择。另外, pattern 参数可以被解释为一种根据ksql的 \d 命令所用的相同规则编写的模式,这样多个模式也可以通过在该模式中书写通配字符来选择。在使用通配符时,如果需要,请小心引用该模式,防止 shell 扩展通配符;请详见下面的示例 。

注意:

指定 -n 时,sys_dump 不会尝试转储所选模式可能依赖的任何其他数据库对象。因此,无法保证特定模式转储的结果可以自行成功地恢复到一个干净的数据库中。

注意:

指定 -n 时,非模式对象(如二进制大对象)不会被转储。您可以使用 --blobs 开关将二进制大对象添加回该转储中。

-N pattern --exclude-schema=pattern:

不转储匹配 pattern 的任何模式。该模式根据与 -n 相同的规则进行解释。可以多次给定 -N 来排除与多个模式中的任何一个匹配的模式。

当 -n 和 -N 都被给定时,该行为是只转储匹配至少一个 -n 开关但是不匹配 -N 开关的模式。如果只有 -N 而没有 -n ,那么匹配 -N 的模式会被从一个正常转储中排除。

-O --no-owner:

不输出设置对象拥有关系来匹配原始数据库的命令。默认情况下,sys_dump 会发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句来设置被创建的数据库对象的拥有关系。除非该脚本是由超级用户(或是拥有脚本中所有对象的同一个用户)启动的,这些语句都将会失败。要使一个脚本能够被任意用户恢复,只有把所有对象的拥有关系都赋予这个用户,可指定 -O 。

这个选项只对纯文本格式有意义。对于归档格式,您可以在调用 sys_restore 时指定该选项。

-R --no-reconnect:

这个选项已经废弃,但是为了向后兼容仍然保留。

-s --schema-only:

只转储对象定义(模式),而非数据。这个选项与 --data-only 选项相反。它和指定 --section=pre-data --section=post-data 相似,但是由于历史原因又不完全相同。(不要把这个选项和 --schema 选项混淆,后者在“schema”的使用上有不同的含义)。要为数据库中表的一个子集排除表数据,见 --exclude-table-data 。

-S username --superuser=username:

指定要在禁用触发器时使用的超级用户的用户名。只有使用 --disable-triggers 时,这个选项才相关(通常,最好省去这个选项,而是以超级用户身份来启动生成的脚本)。

-t pattern --table=pattern:

只转储名字匹配 pattern 的表,table可以是视图、物化视图、序列和外部表。通过写多个 -t 开关可以选择多个表。另外, pattern 参数可以被解释为一种根据ksql的 \d 命令所用的相同规则编写的模式,这样多个表也可以通过在该模式中书写通配符来选择。在使用通配符时,如果需要,请小心引用该模式,防止 shell 扩展通配符,请参加见下面示例。

使用 -t 时, -n 和 -N 开关不会有效果,因为无论那些开关如何,都将转储 -t 选择的表,并且不会转储非表对象。

注意:

指定 -t 时,sys_dump 不会尝试转储所选表可能依赖的任何其他数据库对象。因此,无法保证特定表转储的结果能够自行成功地恢复到一个干净的数据库中。

-T pattern --exclude-table=pattern:

不转储匹配 pattern 模式的任何表。该模式根据与 -t 相同的规则被解释。 -T 可以多次给定来排除与多个模式中的任何一个模式匹配的表。

当同时给定 -t 和 -T 时,该行为是只转储匹配至少一个 -t 开关但是不匹配 -T 开关的表。如果只有 -T 而没有 -t ,那么匹配 -T 的表将从一个正常转储中排除。

-v –verbose:

指定冗长模式。这将导致 sys_dump 向标准错误输出详细的对象注释以及转储文件的开始/停止时间,还有进度消息。

-V –version:

打印 sys_dump 版本并退出。

-x --no-privileges --no-acl:

防止转储访问特权(授予/收回命令)。

-Z 0..9 --compress=0..9:

指定要使用的压缩级别。零意味着不压缩。对于自定义归档格式,这会指定个体表数据段的压缩,并且默认是进行中等级别的压缩。对于纯文本输出,设置一个非零压缩级别会导致整个输出文件被压缩,就好像它被 gzip 处理过一样,但是默认是不压缩。 tar 归档格式当前完全不支持压缩。

--binary-upgrade:

该选项用于就地升级功能,计划在未来的发行版本中实现。

--column-inserts --attribute-inserts:

将数据转储为带有显式列名的 INSERT 命令( INSERT INTO table ( column , ...) VALUES ...)。这将使得恢复过程非常慢,这主要用于使转储能够被载入到非KingbaseES数据库中。在重新加载期间发生的任何错误只会导致有问题的 INSERT 的一部分的行丢失,而不是整个表的内容。

--copy-binary:

将数据转储使用 COPY 命令时以二进制形式进行。

这个选项不能与输出一个纯文本形式的 SQL 脚本文件``-Fp``参数以及使用 INSERT 等转储命令参数同时使用。

--disable-dollar-quoting:

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

--disable-triggers:

只有在创建一个只转储数据的转储时,这个选项才相关。它指示 sys_dump 包括在数据被重新载入时能够临时禁用目标表上的触发器的命令。如果您在表上有引用完整性检查或其他触发器,并且您在数据重新载入期间不想调用它们,请使用这个选项。

当前,为 --disable-triggers 发出的命令必须作为超级用户来执行。因此,您还应当使用 -S 指定一个超级用户名,或者宁可作为一个超级用户启动生成的脚本。

这个选项只对纯文本格式有意义。对于归档格式,您可以在调用 sys_restore 时指定这个选项。

--enable-row-security:

只有在转储具有行安全性的表的内容时,这个选项才相关。默认情况下,sys_dump 将把 row_security 设置为 off 来确保从该表中转储出所有的数据。如果用户不具有足够能绕过行安全性的特权,那么会抛出一个错误。这个参数指示 sys_dump 将 row_security 设置为 on,允许用户只转储该表中它们有权访问的部分内容。

注意如果当前您使用了这个选项,您可能还希望得到 INSERT 格式的转储,因为恢复期间的 COPY FROM 不支持行安全性。

--exclude-table-data=pattern:

不转储匹配 pattern 模式的任何表中的数据。该模式根据 -t 的相同规则被解释。可以给定多次 --exclude-table-data 来排除与多个模式中的任何一个模式匹配的表。当您需要一个特定表的定义但不想要其中的数据时,这个选项就有用了。

要排除数据库中所有表的数据,见 --schema-only 。

--extra-float-digits=ndigits:

在转储浮点数据时,使用 extra_float_digits 的指定值,而不是使用最大可用精度。用于备份目的的常规转储不应使用此选项。

--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 参数导出分区表的主表时,不自动导出所有子表。

--inserts:

将数据转储为 INSERT 命令(而不是 COPY )。这将使恢复非常慢,这主要用于制作可以加载到非 KingbaseES 数据库的转储。在重新加载期间发生的任何错误只会导致有问题的 INSERT 的一部分的行丢失,而不是整个表的内容。注意,如果重新安排了列顺序,则还原可能完全失败。 --column-inserts 选项对于列顺序的更改是安全的,但是更慢。

--load-via-partition-root:

该参数在Oracle模式下自动启用。

在为一个分区表转储数据时,使 COPY 语句或者 INSERT 语句把包含它的分区层次的根作为目标,而不是分区自身。这会导致在装载数据时,为每一行重新确定合适的分区。如果在一台服务器上重新装载数据时,出现行并不是总是落入到和原始服务器上相同的分区中的情况,这个选项就会很有用。例如,如果分区列是文本类型,并且两个系统中用于排序分区列的排序规则有着不同的定义,就会发生这种情况。

从使用这个选项制作的归档恢复时,最好不要使用并行,因为 sys_restore 不会确切地知道一个给定的归档数据项将把数据装载到哪个分区中。这会导致效率不高,因为在并行任务见会有锁冲突,甚至可能由于在所有的相关数据被装载前建立了外键约束而导致重新装载失败。

--lock-wait-timeout=timeout:

在转储的开始从不等待共享表锁的获得。如果在指定的 timeout 内不能锁定表时,则会失败。超时时长可以用 SET statement_timeout 接受的任何格式指定(可以是一个整数表示的毫秒数)。

--no-comments:

不转储注释。

--no-publications:

不转储出版信息。

--no-security-labels:

不转储安全标签。

--no-subscriptions:

不转储订阅。

--no-sync:

默认情况下,sys_dump 将等待所有文件安全地写入磁盘。

这个选项会让 sys_dump 不等待直接返回,这样会更快,但是也意味着后续的操作系统崩溃会让该转储损坏。通常这个选项对测试有用,但是不应该在从生产安装中转储数据时使用。

--no-tablespaces:

不要输出选择表空间的命令。通过这个选项,在恢复期间所有的对象都会创建在默认的表空间中。

这个选项只对纯文本格式有意义。对于归档格式,您可以在调用 sys_restore 时指定该选项。

--no-unlogged-table-data:

不转储非日志记录表的内容。这个选项对于表定义(模式)是否被转储没有影响,它只会限制转储表数据。当从备用服务器转储时,始终排除非日志记录表中的数据。

--on-conflict-do-nothing:

向 INSERT 命令插入 ON CONFLICT DO NOTHING 。此选项无效,除非 --inserts , --column-inserts 或 --rows-per-insert 也是指定的。

--parallel-lob-data:

设置该选项,对含有lob对象(BLOB,BYTEA,CLOB,NCLOB)的表或者分区表数据并行转储。

这个选项需要与 sys_dump -j njobs (njobs > 1)同时使用,才能并行转储。

--progress:

设置该选项,将会显示 sys_dump 的导出总进度,默认不显示。

注意:

总进度的计算方法为已完成导出的数据库对象的数量除以要导出的数据库对象的总数量,有的数据库对象很大(比如大表数据),会卡在某个百分比一直不动;而有的对象很小(比如创建一个函数),百分比变化的会很快;并且进度信息是按秒刷新,若大量小对象在一秒内被处理完了,就会出现百分比突增现象。

注意:

在 sys_dump 或 sys_restore 未加 -v 参数使用 --progress 参数时,若导出导入过程中有告警报错信息,可能就会出现字符串不正常现象,常发生于 sys_restore 导入时,比如 sys_restore: while PROCESSING TOC:16384 TABLE]

--quote-all-identifiers:

强制引用所有标识符。当从 KingbaseES 主版本与 sys_dump 不同的服务器上转储一个数据库时,或者当输出准备载入到一个具有不同主版本的服务器时,推荐使用这个选项。默认情况下,sys_dump 仅引用在其自身的主要版本中作为保留字的标识符。在转储其他版本服务器时,这种默认行为有时会导致兼容性问题,因为那些版本可能具有些许不同的被保留词集合。使用 --quote-all-identifiers 能阻止这种问题,但代价是转储脚本更难阅读。

--rows-per-insert=nrows:

使用 INSERT 命令转储数据(而非 COPY )。控制 INSERT 每行的最大行数。指定的值必须是一个大于零的数字。在重新加载期间发生的任何错误只会导致有问题的 INSERT 的一部分的行丢失,而不是整个表的内容。

--section=sectionname:

只转储命名的段。段的名称可以是 pre-data 、 data 或 post-data 。这个选项可以被指定多次来选择多个段。默认是转储所有段。

数据段包含真正的表数据、大对象内容和序列值。数据后项包括索引、触发器、规则和除了已验证检查约束之外的约束的定义。数据前项包括所有其他数据定义项。

--serializable-deferrable:

为转储使用一个可序列化的事务,保证所使用的快照与后面的数据库状态是一致的。但是这样做是在事务流中等待一个点,在该点上不能存在异常,这样就不会有转储失败或者导致其他事务带着 serialization_failure 回滚的风险。

对于一个只为灾难恢复存在的转储,这个选项没什么益处。如果一个转储被用来在原始数据库持续更新期间载入一份用于报表或其他只读负载的数据库拷贝时,这个选项就有所帮助。如果没有这个选项,转储可能会反映一个与最终提交事务的任何执行序列都不一致的状态。例如,如果使用了批处理技术,一个批处理在转储中可以显示为关闭,而其中的所有项都不出现。

如果 sys_dump 被启动时没有读写事务在活动,则这个选项没有什么不同。如果有读写事务在活动,该转储的启动可能会被延迟一段不确定的时间。一旦开始运行,有没有这个开关的表现是相同的。

--snapshot=snapshotname:

在做一个数据库的转储时指定一个同步的快照。

在需要把转储和一个逻辑复制槽或者一个并发会话同步时可以用上这个选项。

在并行转储的情况下,将使用这个选项指定的快照名而不是取一个新快照。

--strict-names:

要求每一个模式( -n / --schema )和表( -t / --table )限定符至少匹配要转储的数据库中的一个模式/表。注意,如果没有找到有这样的模式/表限定符匹配,即便没有 --strict-names ,sys_dump 也将生成一个错误。

这个选项对 -N / --exclude-schema 、 -T / --exclude-table 或者 --exclude-table-data 没有效果。无法匹配任何对象的排除模式不会被当作错误。

--use-set-session-authorization:

输出 SQL 标准的 SET SESSION AUTHORIZATION 命令取代 ALTER OWNER 命令来确定对象的所有关系。这让该转储更加兼容标准,但是根据该转储中对象的历史记录,可能无法正常恢复。此外,使用 SET SESSION AUTHORIZATION 的转储肯定需要超级用户权限才能正确地恢复,而 ALTER OWNER 需要较少的权限。

-? –help:

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

下列时命令行选项控制数据库连接参数。

-d dbname --dbname=dbname:

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

如果这个参数包含一个 = 符号或者以一个合法的URI前缀( kingbase:// 或 kingbase:// )开始,它将被视作一个 conninfo 字符串。

-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 在连接到一个数据库之前提示输入密码。

这个选项从来不是必须的,因为如果服务器要求密码验证,sys_dump 会将自动提示输入密码。但是,sys_dump 将浪费一次连接尝试来发现服务器需要密码。在某些情况下,值得键入 -W 来避免额外的连接尝试。

--role=rolename:

指定用来创建转储的角色名。这个选项导致 sys_dump 在连接到数据库后发出 SET ROLE rolename 命令。当经过身份验证的用户(由 -U 指定)缺少 sys_dump 所需的权限,但是能够切换到一个具有所需权限的角色时,这个选项很有用。一些安装有针对直接作为超级用户登录的策略,使用这个选项可以让转储在不违反该策略的前提下完成。

-M --enable_ce:

dump导出密态对象。

环境变量

KINGBASE_DATABASE:

如果被设置,就是要创建的数据库名,默认和用户名相同,除非在命令行中覆盖。

KINGBASE_HOST:

指定要连接的主机名,默认连接到localhost。

KINGBASE_PORT:

指定要连接的服务器的端口号,默认为54321。需要根据数据库实际部署修订。

KINGBASE_USER:

指定要使用哪个用户连接数据库。默认与使用数据库的操作系统用户名相同。

PGOPTIONS:

指定要使用那些参数连接到数据库。

SYS_COLOR:

指定是否在诊断消息中使用颜色。可能的值是 always , auto , never .

和大部分其他 KingbaseES 工具相似,这个工具也使用 libkci 支持的环境变量。

示例

要把一个数据库 mydb 转储到一个 SQL 脚本文件:

$ sys_dump mydb > db.sql

要把这样一个脚本重新载入到一个(新创建的)名为 newdb 的数据库中:

$ ksql -d newdb -f db.sql

要转储一个数据库到一个自定义格式归档文件:

$ sys_dump -Fc mydb > db.dump

要转储一个数据库到一个目录格式的归档:

$ sys_dump -Fd mydb -f dumpdir

要用 5 个并行的工作者任务转储一个数据库到一个目录格式的归档:

$ sys_dump -Fd mydb -j 5 -f dumpdir

要把一个归档文件重新载入到一个(新创建的)名为 newdb 的数据库:

$ sys_restore -d newdb db.dump

把一个归档文件重新装载到同一个数据库(该归档正是从这个数据库中转储得来)中,丢掉那个数据库中的当前内容:

$ sys_restore -d kingbase --clean --create db.dump

要转储一个名为 mytab 的表:

$ sys_dump -t mytab mydb > db.sql

要并行转储一个名为 mytab 的表:

$ sys_dump -t mytab mydb -Fd --parallel-lob-data -j5 -f dumpdir

要以二进制方式转储一个名为 mytab 的表:

$ sys_dump -t mytab mydb -Fd --copy-binary -f dumpdir

要转储 detroit 模式中名称以 emp 开始的所有表,排除名为 employee_log 的表:

$ sys_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql

要转储名称以 east 或者 west 开始并且以 gsm 结束的所有模式,排除名称包含词 test 的任何模式:

$ sys_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql

同样,用正则表达式记号法来合并开关:

$ sys_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql

要转储除了名称以 ts_ 开头的表之外的所有数据库对象:

$ sys_dump -T 'ts_*' mydb > db.sql

在 -t 和相关开关中指定一个大写或混合大小写的名称,需要将名称用双引号引起来,否则会被折叠为小写。并且双引号对于 shell 是特殊的,所以必须依次引用。因此,要转储一个有混合大小写名称的表,您需要类似这样的东西:

$ sys_dump -t "\"MixedCaseName\"" mydb > mytab.sql

设置--including-all-partiton=0 导出指定主表结构

$ sys_dump -Usystem -d db10 -p8899 -Fp -f r_p_dump.dmp -t r_p_dump --including-all-partiton=0

设置--including-all-partiton=1 排除主表和子表结构和数据

$ sys_dump -Usystem -d db10 -p8899 -Fp -f r_p_dump.dmp -T r_p_dump --including-all-partition=1

参考资料

《 KingbaseES备份与恢复工具手册》

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值