diff --git a/content/zh/post/wllove/gs_dump.md b/content/zh/post/wllove/gs_dump.md new file mode 100644 index 0000000000000000000000000000000000000000..fba68bad6c719b562fe82cfa900e863a5706c3dd --- /dev/null +++ b/content/zh/post/wllove/gs_dump.md @@ -0,0 +1,76 @@ ++++ +title = "使用gs_dump导出数据库" +date = "2022-9-1" +tags = ["openGauss3.0.0"] +archives = "2020-09" +author = "wllovever" +img = "/zh/post/wllove/title/title.png" +summary = "OpenGauss3.0.0" +times = "12:10" ++++ + +openGauss支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息: + +导出数据库全量信息,包含数据和所有对象定义。 + +使用导出的全量信息可以创建一个与当前库相同的数据库,且库中数据也与当前库相同。 + +仅导出所有对象定义,包括:库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。 + +使用导出的对象定义,可以快速创建一个相同的数据库,但是库中并无原数据库的数据。 + +仅导出数据,不包含所有对象定义。 + +操作步骤 +以操作系统用户omm登录数据库主节点。 +使用gs_dump导出userdatabase数据库。 + +``` +gs_dump -U jack -f /home/omm/backup/userdatabase_backup.tar -p 8000 postgres -F t +``` + +常有参数说明: + +-U 连接数据库的用户名。 不指定连接数据库的用户名时,默认以安装时创建的初始系统管理员连接。 + +-W 指定用户连接的密码。 如果主机的认证策略是trust,则不会对数据库管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是数据库管理员,会提示用户输入密码。 + +-f 将导出文件发送至指定目录文件夹。如果这里省略,则使用标准输出。 + +-p 指定服务器所侦听的TCP端口或本地Unix域套接字后缀,以确保连接。 + +dbname 需要导出的数据库名称。 + +-F 选择导出文件格式。-F参数值如下: + +p:纯文本格式 + +c:自定义归档 + +d:目录归档格式 + +t:tar归档格式 + +示例一:执行gs_dump,导出postgres数据库全量信息,导出文件格式为sql文本格式。 + +``` +gs_dump -f /home/omm/backup/postgres_backup.sql -p 8000 postgres -F p +``` + +示例二:执行gs_dump,仅导出postgres数据库中的数据,不包含数据库对象定义,导出文件格式为自定义归档格式。 + +``` +gs_dump -f /home/omm/backup/postgres_data_backup.dmp -p 8000 postgres -a -F c +``` + +示例三:执行gs_dump,仅导出postgres数据库所有对象的定义,导出文件格式为sql文本格式。 + +``` +gs_dump -f /home/omm/backup/postgres_def_backup.sql -p 8000 postgres -s -F p +``` + +示例四:执行gs_dump,仅导出postgres数据库的所有对象的定义,导出文件格式为文本格式,并对导出文件进行加密。 + +``` +gs_dump -f /home/omm/backup/postgres_def_backup.sql -p 8000 postgres --with-encryption AES128 --with-key 1234567812345678 -s -F p +``` diff --git a/content/zh/post/wllove/gs_dumpall.md b/content/zh/post/wllove/gs_dumpall.md deleted file mode 100644 index df7a04f88befb80a6f4fea316b9df34e80c6f2e0..0000000000000000000000000000000000000000 --- a/content/zh/post/wllove/gs_dumpall.md +++ /dev/null @@ -1,55 +0,0 @@ -+++ -title = "使用gs_dumpall导出所有数据库" -date = "2022-09-01" -tags = ["OpenGauss3.0.0"] -archives = "2020-09" -author = "wllovever" -summary = "OpenGauss3.0.0" -img = "" -times = "15:10" -+++ - -1.gs_dumpall命令介绍: -penGauss支持使用gs_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库信息和公共的全局对象信息。可根据需要自定义导出如下信息: -导出所有数据库全量信息,包含openGauss中每个数据库信息和公共的全局对象信息(包含角色和表空间信息)。 -使用导出的全量信息可以创建与当前主机相同的一个主机环境,拥有相同数据库和公共全局对象,且库中数据也与当前各库相同。 -仅导出数据,即导出每个数据库中的数据,且不包含所有对象定义和公共的全局对象信息。 -仅导出所有对象定义,包括:表空间、库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。 -使用导出的对象定义,可以快速创建与当前主机相同的一个主机环境,拥有相同的数据库和表空间,但是库中并无原数据库的数据。 - -2.gs_dumpall命令详解: -gs_dumpall -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 -参数说明: --U -连接数据库的用户名,需要是openGauss管理员用户。 --W -指定用户连接的密码。 -如果主机的认证策略是trust,则不会对数据库管理员进行密码验证,即无需输入-W选项; -如果没有-W选项,并且不是数据库管理员,会提示用户输入密码。 --f -将导出文件发送至指定目录文件夹。如果这里省略,则使用标准输出 --p -指定服务器所监听的TCP端口或本地Unix域套接字后缀,以确保连接。 - -3.具体示例 -示例一:执行gs_dumpall,导出所有数据库全量信息(omm用户为管理员用户),导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 -gs_dumpall -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 -Password: -gs_dumpall[port='8000'][2017-07-21 15:57:31]: dumpall operation successful -gs_dumpall[port='8000'][2017-07-21 15:57:31]: total time: 9627 ms - -示例二:执行gs_dumpall,仅导出所有数据库定义(omm用户为管理员用户),导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 -gs_dumpall -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 -s -Password: -gs_dumpall[port='8000'][2018-11-14 11:28:14]: dumpall operation successful -gs_dumpall[port='8000'][2018-11-14 11:28:14]: total time: 4147 ms - -示例三:执行gs_dumpall,仅导出所有数据库中数据,并对导出文件进行加密,导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 -gs_dumpall -f /home/omm/backup/MPPDB_backup.sql -p 8000 -a --with-encryption AES128 --with-key abcdefg_?1234567 -gs_dumpall[port='8000'][2018-11-14 11:32:26]: dumpall operation successful -gs_dumpall[port='8000'][2018-11-14 11:23:26]: total time: 4147 ms - - - - - diff --git a/content/zh/post/wllove/title/title.png b/content/zh/post/wllove/title/title.png deleted file mode 100644 index 86a420b92fb8289658d807d49f137b6d13862f6d..0000000000000000000000000000000000000000 Binary files a/content/zh/post/wllove/title/title.png and /dev/null differ diff --git "a/content/zh/post/wllove/\345\242\236\351\207\217\347\211\251\345\214\226\350\247\206\345\233\276\347\232\204\344\275\277\347\224\250.md" "b/content/zh/post/wllove/\345\242\236\351\207\217\347\211\251\345\214\226\350\247\206\345\233\276\347\232\204\344\275\277\347\224\250.md" deleted file mode 100644 index 0aeb7883144a031dc256b6df42a0e1c0180e7fb0..0000000000000000000000000000000000000000 --- "a/content/zh/post/wllove/\345\242\236\351\207\217\347\211\251\345\214\226\350\247\206\345\233\276\347\232\204\344\275\277\347\224\250.md" +++ /dev/null @@ -1,160 +0,0 @@ -+++ -title = "增量物化视图的使用" -date = "2022-09-09" -tags = ["OpenGauss3.0.0"] -archives = "2020-09" -author = "wllovever" -summary = "OpenGauss3.0.0" -img = "/zh/post/wllove/title/title.png" -times = "15:10" -+++ - - -##增量物化视图介绍 - -增量物化视图可以对物化视图增量刷新,需要用户手动执行语句完成对物化视图在一段时间内的增量数据刷新。与全量创建物化视图的不同在于目前增量物化视图所支持场景较小。 - -目前物化视图创建语句仅支持基表扫描语句或者UNION ALL语句。 - -##增量物化视图使用场景介绍 - -1.支持场景: - -单表查询语句。 - -多个单表查询的UNION ALL。 - -物化视图上支持创建索引。 - -物化视图支持Analyze操作。 - -2.不支持场景 - -物化视图中不支持多表Join连接计划以及subquery计划。 - -除少部分ALTER操作外,不支持对物化视图中基表执行绝大多数DDL操作。 - -物化视图不支持增删改操作,只支持查询语句。 - -不支持用临时表/hashbucket/unlog/分区表创建物化视图。 - -不支持物化视图嵌套创建(即物化视图上创建物化视图)。 - -仅支持行存表,不支持列存表。 - -不支持UNLOGGED类型的物化视图,不支持WITH语法。 - -3.约束 - -物化视图定义如果为UNION ALL,则其中每个子查询需使用不同的基表。 - -增量物化视图的创建、全量刷新、删除过程中会给基表加高级别锁,若物化视图的定义为UNION ALL,需要注意业务逻辑,避免死锁产生。 - -##增量物化视图的使用 - -创建增量物化视图 - -``` -CREATE INCREMENTAL MATERIALIZED VIEW [ view_name ] AS { query_block }; -``` - -全量刷新物化视图 - -``` -REFRESH MATERIALIZED VIEW [ view_name ]; -``` - -增量刷新物化视图 - -``` -REFRESH INCREMENTAL MATERIALIZED VIEW [ view_name ]; -``` - -删除物化视图 - -``` -DROP MATERIALIZED VIEW [ view_name ]; -``` - -查询物化视图 - -``` -SELECT * FROM [ view_name ]; -``` - -##增量物化视图示例 - ---准备数据。 - -``` -openGauss=# CREATE TABLE t1(c1 int, c2 int); -openGauss=# INSERT INTO t1 VALUES(1, 1); -openGauss=# INSERT INTO t1 VALUES(2, 2); -``` - ---创建增量物化视图。 - -``` -openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW mv AS SELECT * FROM t1; -CREATE MATERIALIZED VIEW -``` - ---插入数据。 - -``` -openGauss=# INSERT INTO t1 VALUES(3, 3); -INSERT 0 1 -``` - ---增量刷新物化视图。 - -``` -openGauss=# REFRESH INCREMENTAL MATERIALIZED VIEW mv; -REFRESH MATERIALIZED VIEW -``` - ---查询物化视图结果。 - -``` -openGauss=# SELECT * FROM mv; - c1 | c2 -----+---- - 1 | 1 - 2 | 2 - 3 | 3 -(3 rows) -``` - ---插入数据。 - -``` -openGauss=# INSERT INTO t1 VALUES(4, 4); -INSERT 0 1 -``` - ---全量刷新物化视图。 - -``` -openGauss=# REFRESH MATERIALIZED VIEW mv; -REFRESH MATERIALIZED VIEW -``` - ---查询物化视图结果。 - -``` -openGauss=# select * from mv; - c1 | c2 -----+---- - 1 | 1 - 2 | 2 - 3 | 3 - 4 | 4 -(4 rows) -``` - ---删除物化视图。 - -``` -openGauss=# DROP MATERIALIZED VIEW mv; -DROP MATERIALIZED VIEW -``` \ No newline at end of file diff --git "a/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" "b/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" deleted file mode 100644 index 14231bc6f862fa69b8da1654dfd428517e8ebdad..0000000000000000000000000000000000000000 --- "a/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" +++ /dev/null @@ -1,51 +0,0 @@ - -+++ -title = "存储过程支持自治事务" -date = "2022-09-30" -tags = ["openGauss3.0.0"] -archives = "2020-09" -author = "wllove" -summary = "OpenGauss3.0.0" -img = "/zh/post/wllove/title/title.png" -times = "16:10" -+++ -自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,示例如下。 - ---建表 -``` -create table t2(a int, b int); insert into t2 values(1,2); select * from t2; -``` ---创建包含自治事务的存储过程 -``` -CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int) -AS -DECLARE - num3 int := a; - num4 int := b; -PRAGMA AUTONOMOUS_TRANSACTION; -BEGIN -insert into t2 values(num3, num4); -END; -/ -``` ---创建调用自治事务存储过程的普通存储过程 -``` -CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) -AS -DECLARE -BEGIN -insert into t2 values(666, 666); -autonomous_4(a,b); -rollback; -END; -/ -``` ---调用普通存储过程 -``` -select autonomous_5(11,22); -``` ---查看表结果 -``` -select * from t2 order by a; -``` -上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 diff --git "a/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" "b/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" deleted file mode 100644 index bea986bff5d83e9b6e6bfb116ca3fd79dc04e921..0000000000000000000000000000000000000000 --- "a/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" +++ /dev/null @@ -1,93 +0,0 @@ -+++ -title = "使用gs_dump导出数据库" -date = "2022-9-23" -tags = ["OpenGauss3.0.0"] -archives = "2020-09" -author = "wllove" -summary = "OpenGauss3.0.0" -img = "/zh/post/wllove/title/title.png" -times = "17:10" -+++ - -## 功能描述 - -openGauss对数据复制能力的支持情况为: - -支持通过数据迁移工具定期向异构数据库(如Oracle等)进行数据同步,不具备实时数据复制能力。不足以支撑与异构数据库间并网运行实时数据同步的诉求。 - -openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。逻辑复制降低了对目标数据库的形态限制,支持异构数据库、同构异形数据库对数据的同步,支持目标库进行数据同步期间的数据可读写,数据同步时延低。 - -逻辑复制由两部分组成:逻辑解码和数据复制。逻辑解码会输出以事务为单位组织的逻辑日志。业务或数据库中间件将会对逻辑日志进行解析并最终实现数据复制。openGauss当前只提供逻辑解码功能,因此本章节只涉及逻辑解码的说明。 - -逻辑解码为逻辑复制提供事务解码的基础能力,openGauss使用SQL函数接口进行逻辑解码。此方法调用方便,不需使用工具,对接外部工具接口也比较清晰,不需要额外适配。 - -由于逻辑日志是以事务为单位的,在事务提交后才能输出,且逻辑解码是由用户驱动的;因此为了防止事务开始时的xlog被系统回收,或所需的事务信息被VACUUM回收,openGauss新增了逻辑复制槽,用于阻塞xlog的回收。 - -一个逻辑复制槽表示一个更改流,这些更改可以在其它数据库中以它们在原数据库上产生的顺序被重播。逻辑复制槽,由每个逻辑日志的获取者维护一个。 - -## 注意事项 - -- 不支持DDL语句解码,在执行特定的DDL语句(例如普通表truncate或分区表exchange)时,可能造成解码数据丢失。 - -- 不支持列存、数据页复制的解码。 - -- 不支持级联备机进行逻辑解码。 - -- 当执行DDL语句(如alter table)后,该DDL语句前尚未解码的物理日志可能会丢失。 - -- 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。 - -- openGauss支持解码的数据类型为:INTEGER、BIGINT、SMALLINT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME[WITHOUT TIME ZONE]、TIMESTAMP[WITHOUT TIME ZONE]、CHAR(n)、VARCHAR(n)、TEXT。 - -- 如果需要ssl连接需要保证前置设置GUC参数ssl=on。 - -- 逻辑复制槽名称必须小于64个字符,且只包含小写字母、数字或者下划线中的一种或几种。 - -- 当前逻辑复制不支持MOT特性。 - -- 当逻辑复制槽所在数据库被删除后,这些复制槽变为不可用状态,需要用户手动删除。 - -- 仅支持utf-8字符集。 - -- 对多库的解码需要分别在库内创建流复制槽并开始解码,每个库的解码都需要单独扫一遍日志。 - -- 不支持强起,强起后需要重新全量导出数据。 - -- 备机解码时,switchover和failover时可能出现解码数据变多,需用户手动过滤。Qurem协议下,switchover和failover选择升主的备机,需要与当前主机日志同步。 - -- 不允许主备,多个备机同时使用同一个复制槽解码,否则会产生数据不一致。 - -- 只支持主机创建删除复制槽。 - -- 数据库故障重启或逻辑复制进程重启后,解码数据存在重复,用户需自己过滤。 - -- 计算机内核故障后,解码存在乱码,需手动或自动过滤。 - -- 当前备机逻辑解码,不支持开启极致RTO。 - -- 请确保在创建逻辑复制槽过程中长事务未启动,启动长事务会阻塞逻辑复制槽的创建。 - -- 不支持interval partition表复制。 - -- 不支持全局临时表。 - -- 在事务中执行DDL语句后,该DDL语句与之后的语句不会被解码。 - -- 如需进行备机解码,需在对应主机上设置guc参数enable_slot_log = on。 - -- 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽进行操作的操作需在该复制槽停止解码后执行。 - -## 性能 - -在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_changes时: - -- 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5 MB/s 。 - -- 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s 。 - -- 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s 。 - -- 单次解码数据量再增大,解码性能无明显提升。 - -如果采用pg_logical_slot_peek_changes + pg_replication_slot_advance 方式,解码性能相比采用pg_logical_slot_get_changes时要下降30%~50%。 -