返回首页

gbase数据、南大通用产品文档:GBase8s恢复期间重命名块

更新日期:2024年09月11日

可以在冷恢复期间使用 ontape 重命名块。如果需要将存储空间恢复到与完成备份的磁盘
不同的磁盘上,该选项很有帮助。可以重命名任意类型的块,包括关键块和镜像块。
ontape 重命名块恢复仅对冷恢复可用。
冷恢复时必须恢复关键的数据库空间(如 rootdbs)。 如果不指定要恢复的数据库空间列
表,那么服务器会恢复关键的数据库空间以及其他所有数据库空间。但如果指定了要恢复
的数据库空间列表,那么其中必须包括关键的数据库空间。
有关使用 ontape 重命名块的语法,请参阅ontape 实用程序执行恢复的语法。
提示: 如果使用到块名称的符号链接,可以不需要重命名块;而只需编辑符号名称定义即
可。有关更多信息,请参阅《GBase 8s 管理员指南》。
您可以在外部冷恢复的过程中对块进行重命名。有关更多信息,请参阅重命名块。

重命名块的验证顺序
在冷恢复期间,ontape 执行以下验证来重命名块:

验证在归档保留页中是否存在旧块的路径名和偏移量。

验证各个新块之间或新块与现有块之间的路径名与偏移量是否相互重叠。

如果对主根块或镜像根块进行重命名,那么将更新 onconfig 文件参数
ROOTPATH 和 ROOTOFFSET,或 MIRRORPATH 和 MIRROROFFSET。旧版
本的 onconfig 文件将另存为 $ONCONFIG.localtime。

将旧块中的数据恢复到新块(如果新块存在)中。

将每个块的重命名信息写入到联机日志中。
如果任意一个验证步骤失败,剩余的进程停止并且 ontape 将一条错误消息写入到 ontape
活动日志中。
重要:

重命名块后请执行 0 级归档;否则下次恢复将失败。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 159 -


如果在执行 0 级归档后添加了块,那么恢复期间无法重命名该块。同时也不能安
全地在映射列表中将该块指定为新路径。

为参与 HDR 的数据库服务器重命名块的操作中,两个数据库服务器都要长时间
地脱机。有关更多信息,请参阅《GBase 8s 管理员指南》。

新块需求
要重命名块,请遵循以下新块的准则:

新块不是必须存在的
可以以后安装新块并对包含它的存储空间执行热恢复。如果指定不存在的块,
ontape 将重命名信息记录在块的保留页中,但不恢复数据。已重命名(但未恢
复)的块处于脱机状态,在 onstat -d 块状态命令输出中由 D 指示。

新块必须有适当的权限。
除非新块有适当的权限,否则重命名操作将失败。有关更多信息,请参阅《GBase
8s 管理员指南》。

使用命令行选项重命名块
要通过提供命令行的信息来重命名块,请使用此命令:
ontape -r -rename -p /chunk1 -o 0 -n /chunk1N -o 20000
-rename -p /chunk2 -o 10000 -n /chunk2N -o 0
在重命名和恢复操作完成后执行 0 级归档。

使用文件重命名块
要通过提供名为 listfile 的文件来重命名块,请使用以下命令:ontape -r -rename -f listfile
listfile 文件的内容是:
/chunk1 0 /chunk1N 20000
/chunk2 10000 /chunk2N 0
在重命名和恢复操作完成后执行 0 级归档。

指定其他选项时重命名块
要在 dbspace1 和 dbspace2 上执行恢复时使用命令行选项来重命名块,并且其中 rootdbs 是
rootdbs 的名称,请使用以下命令:
ontape -r -rename -p /chunk1 -o 0 -n /chunk1N -o 20000

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 160 -

-rename -p /chunk2 -o 10000 -n /chunk2N -o 0
-D rootdbs dbspace1 dbspace2
此外,要在 dbspace1 和 dbspace2 上执行恢复时使用文件重命名块,请使用以下命令:
ontape -r -rename -f listfile -D rootdbs dbspace1 dbspace2
在重命名和恢复操作完成后执行 0 级归档。

将块重命名到不存在的设备上
要将块重命名到还不存在的设备上,首先指定新的路径名,但直到您安装了该物理设备
后,才能恢复它的存储空间。该选项在您需要重命名块时很有用,便于您在安装新设备前
执行冷恢复。当新块设备就绪后,您可以在它上面执行存储空间的热恢复。
可以在同一个重命名操作中将重命名块与现有设备结合在一起,以及将重命名块与不存在
的设备结合在一起。本示例显示如何将单个块重命名到不存在的设备名上。
下表列出本示例中使用的块的示例值。
存储空间
旧块的路径
旧偏移

新块的路径 新偏移量
sbspace1
/chunk3
0
/chunk3N
0

将块重命名到不存在的设备上
要将块重命名到不存在的设备上:
1.
重命名块:使用以下命令:ontape -r -rename -p /chunk3 -o 0 -n /chunk3N -o 0
2.
当以下提示出现时,请输入 y 以继续:
块 /chunk3N 不存在。如果继续,那么对包含该块
的数据库空间的恢复操作稍后可能会失败。
在不创建该块的情况下,是否继续?(y/n)
块 /chunk3 被重命名为 /chunk3N,但数据还未恢复到 /chunk3N 上。
3.
执行 0 级归档。
4.
为 /chunk3N 添加物理设备。
5.
使用 ontape -r -D sbspace1 命令来执行 sbspace1 的热恢复。
6.
执行 0 级归档。

BIGSERIAL 数据类型存储 BIGINT 数据类型的顺序整数(在插入新行时由数据库服
务器自动指定)。BIGSERIAL 数据类型的行为与 SERIAL 数据类型相似,但范围更大。
缺省 BIGSERIAL 起始号为 1,但可以在创建或改变表时指定初始值 n。n 值必须为
1 至 9,223,372,036,854,775,807 范围内的正整数。如果将值零 (0) 插入到 BIGSERIAL
列,使用的值是 BIGSERIAL 列中已存在的最大正值 + 1。如果您插入任何非零值,该值
会原样插入。
由于所有串行数据类型都如此,因此 BIGSERIAL 数据类型会存储您提供的负值。然
而,生成的值通常是从 1 到 2
63 -1 的正数。
BIGSERIAL 数据类型可以存储从 -(2
63 -1) 到 2
63 -1 的值,即 –
9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 的 8 个字节的值。
一个表只能有一个 SERIAL 列,但是它可以具有一个 SERIAL 列和一个 SERIAL8 列
或 BIGSERIAL 列。
将 SERIAL8 和 BIGSERIAL 与 INT8 或 BIGINT 配合使用

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 87 -
对 INT8 和 BIGINT 有效的所有算术运算符(例如:+、-、* 和 /)以及对 INT8
和 BIGINT 有效的所有 SQL 函数(例如,ABS、MOD 和 POW 等等)对 SERIAL8 和
BIGSERIAL 值同样有效。
适用于 INT8 和 BIGINT 的数据转换规则也适用于 SERIAL8 和 BIGSERIAL,但对于
SERIAL8 或 BIGSERIAL 具有 NOT NULL 约束。
一个表的 SERIAL8 或 BIGSERIAL 列的值可存储在另一个表的 INT8 或 BIGINT 列
中。但是,在第二个表中,INT8 或 BIGINT 值不遵从原始 SERIAL8 或 BIGSERIAL 列的
约束。

可以使用向下钻取查询
(也称为 SQL 跟踪)
来收集有关运行的每个 SQL 语句的统计信息
以及分析语句历史记录。
SQL 跟踪可帮助您回答如下问题:

SQL 语句耗费多少时间?

单个语句使用多少资源?

语句执行耗费多少时间?

等待每个资源耗费多少时间?
统计信息存储在循环缓冲区(内存中名为 syssqltrace 的伪表)中,即存储在 sysmaster 数据
库中。您可以动态地调整循环缓冲区的大小。
缺省情况下,SQL 跟踪已关闭,但是您可以对所有用户或一组特定用户打开此功能。在启
用具有缺省配置的 SQL 跟踪时,
数据库服务器会跟踪运行的上 1000 条 SQL 语句,
以及
这些语句的概要统计信息。还可以全局禁用 SQL 跟踪或禁用对特定用户的 SQL 跟踪。
如果您计划保存大量历史信息,那么 SQL 跟踪所需的内存相当大。SQL 跟踪所需的缺省
空间量为 2 MB。可以根据需求增加或减少存储量。
显示的信息包括:

运行命令的用户的用户标识

数据库会话标识

数据库的名称

SQL 语句的类型

SQL 语句执行的持续时间

该语句完成的时间

带有语句类型的 SQL 语句文本或函数调用列表(也称为堆栈跟踪),例如:
procedure1() calls procedure2() calls procedure3()

统计信息包括:

缓冲区读取和写入的数目

页面读取和写入的数目

排序和磁盘排序的数目

锁请求和等待的数目

逻辑日志记录的数目

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 556 -

索引缓冲区读取的数目

估计的行数

优化器估计成本

返回的行数

数据库隔离级别。
也可指定跟踪中要包含的信息的升级级别,如下所示:

低级别跟踪,缺省情况下已启用,用于捕获以下示例中显示的信息。该信息包含语
句统计信息、语句文本和语句迭代器。

中等级别跟踪,除了用于捕获低级别跟踪中包含的所有信息外,还捕获表名、数据
库名称和存储过程堆栈的列表。

高级别跟踪,除了用于捕获中等级别跟踪中包含的所有信息外,还捕获主变量。
所跟踪的信息量影响该历史数据所需的内存量。
您可以在任何时候启用和禁用跟踪,并可在数据库服务器运行时更改跟踪缓冲区的数目和
大小。如果调整跟踪缓冲区的大小,那么数据库服务器将尝试维护缓冲区的内容。如果增
大这些参数,数据将不会被截断。但是,如果缓冲区的数目或大小减小,那么跟踪缓冲区
中的数据将被截断或丢失。
缓冲区的数目确定了所跟踪的 SQL 语句数。
每个缓冲区包含单个 SQL 语句的信息。
缺省
情况下,各个跟踪缓冲区的大小是固定的。如果缓冲区中存储的文本信息超过跟踪缓冲区
的大小,那么数据被截断。
以下示例显示 SQL 跟踪信息:
select * from syssqltrace where sql_id = 5678;

sql_id 5678
sql_address 4489052648
sql_sid 55
sql_uid 2053
sql_stmttype 6
sql_stmtname INSERT
sql_finishtime 1140477805
sql_begintxtime 1140477774
sql_runtime 30.86596333400
sql_pgreads 1285
sql_bfreads 19444
sql_rdcache 93.39127751491
sql_bfidxreads 5359

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 557 -
sql_pgwrites 810
sql_bfwrites 17046
sql_wrcache 95.24815205913
sql_lockreq 10603
sql_lockwaits 0
sql_lockwttime 0.00
sql_logspace 60400
sql_sorttotal 0
sql_sortdisk 0
sql_sortmem 0
sql_executions 1
sql_totaltime 30.86596333400
sql_avgtime 30.86596333400
sql_maxtime 30.86596333400
sql_numiowaits 2080
sql_avgiowaits 0.014054286131
sql_totaliowaits 29.23291515300
sql_rowspersec 169.8958799132
sql_estcost 102
sql_estrows 1376
sql_actualrows 5244
sql_sqlerror 0
sql_isamerror 0
sql_isollevel 2
sql_sqlmemory 32608
sql_numiterators 4
sql_database db3
sql_numtables 3
sql_tablelist t1
sql_statement insert into t1 select {+ AVOID_FULL(sysindices) } 0, tabname
有关所有表行的解释,请参阅《GBase 8s 管理员参考》的 sysmaster 数据库部分中有
关 syssqltrace 表的信息。
使用 SQLTRACE 配置参数指定启动 SQL 跟踪信息
使用 SQLTRACE 配置参数可控制数据库服务器启动时的缺省跟踪行为。缺省情况下,不
设置该参数。所设置的信息包括要跟踪的 SQL 语句数目和跟踪方式。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 558 -
可以修改 onconfig 文件的任何用户均可修改 SQLTRACE 配置参数的值,并可影响启动配
置。但是,只有用户 gbasedbt、root 或被授予 sysadmin 数据库连接特权的 DBSA 才可以
使用 SQL 管理 API 命令来修改 SQL 跟踪的运行时状态。
要在数据库服务器启动时指定 SQL 跟踪信息,请执行以下操作:
1. 设置 onconfig 文件中的 SQLTRACE 配置参数。
2. 重新启动数据库服务器。
示例
onconfig 文件中的以下设置指定数据库服务器将收集有关系统上所有用户执行过的低级别
信息,最多收集 2000 条,并分配大约 4 MB 内存 (2000 * 2 KB)。
SQLTRACE level=LOW,ntraces=2000,size=2,mode=global
如果仅使用部分已分配的缓冲区空间(例如,缓冲区空间的 42%),那么所分配的内存量
仍然为 2 KB。
如果不想设置 SQLTRACE 配置参数并重新启动了服务器,那么可以运行以下 SQL 管理
API 命令,该命令提供的功能与为当前会话设置 SQLTRACE 的功能相同:
EXECUTE FUNCTION task("set sql tracing on", 100,"1k","med","user");
在以用户方式启用 SQL 跟踪系统后,
就可以启用对每个用户的跟踪。
请参阅启用 SQL 跟
踪。
有关使用 task() 和 admin() 函数的更多信息,请参阅《GBase 8s 管理员参考》。
有关 SQLTRACE 配置参数的更多信息
(包括某些字段的最小值和最大值)

请参阅
《GBase
8s 管理员参考》。
全局禁用 SQL 跟踪或禁用对某个会话的 SQL 跟踪
即使 SQLTRACE 配置参数中指定的方式为 global 或 user,但如果要完全关闭所有用户和
全局跟踪,
并取消分配给 SQL 跟踪当前正在使用的资源,
也可以禁用 SQL 跟踪。
缺省情
况下,禁用对所有用户的 SQL 跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。
要禁用全局 SQL 跟踪,请运行使用 set sql tracing off 自变量的 SQL 管理
API task() 或 admin() 函数。
要禁用对特定会话的 SQL 跟踪,请运行 set sql tracing off 作为第一个自变量,会话标识号
作为第二个自变量的 task() 或 admin() 函数。
示例
以下示例全局禁用 SQL 跟踪:
EXECUTE FUNCTION task('set sql tracing off');
(expression) SQL tracing off.

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 559 -

1 row(s) retrieved.
以下示例对标识为 47 的会话禁用 SQL 跟踪:
EXECUTE FUNCTION task(“set sql user tracing off”,47);
有关使用 task() 或 admin() 函数的更多信息,请参阅《GBase 8s SQL 指南:语法》。
启用对特定用户的 SQL 跟踪
在指定 user 作为 SQLTRACE 配置参数中的方式后,必须运行 SQL 管理
API task() 或 admin() 函数来打开对特定用户的 SQL 历史记录跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。
无需启用全局 SQL 跟踪,即可对特定用户进行 SQL 跟踪。
要启用对特定用户的 SQL 跟踪,请运行使用 set sql tracing on 作为第一个自变量,用户会
话标识作为第二个自变量的 task() 或 admin() 函数。
要对除 root 或 gbasedbt 之外的所有用户启用用户 SQL 跟踪,可运行使用 set sql tracing
on 自变量和定义这些用户的信息的 task() 或 admin() 函数。
示例
以下示例对会话标识为 74 的用户启用 SQL 跟踪:
EXECUTE FUNCTION task("set sql user tracing on", 74);
以下示例启用对当前连接到系统的用户(只要它们未以用户 root 或 gbasedbt 身份登录)的
SQL 语句跟踪。
dbaccess sysadmin -<execute function task("set sql tracing on", 1000, 1,"low","user");
select task("set sql user tracing on", session_id)

FROM sysmaster:syssessions

WHERE username not in ("root","gbasedbt");
END
有关 task() 和 admin() 函数的更多信息,请参阅《GBase 8s 管理员参考》。
启用对某个会话的全局 SQL 跟踪
可以通过运行 SQL 管理 API task() 或 admin() 函数,对当前会话启用全局 SQL 跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。
缺省情况下,全局 SQL 跟踪未启用。可以设置 SQLTRACE 配置参数以永久启用全局跟
踪。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 560 -
要对当前数据库服务器会话启用全局用户 SQL 历史记录跟踪,请运行使用 set sql tracing
on 自变量的 SQL 管理 API task() 或 admin() 函数。
示例
以下示例对所有用户启用全局低级别 SQL 跟踪:
EXECUTE FUNCTION task("set sql tracing on", 1000, 1,"low","global");
如果在语句运行后有新用户登录到系统,那么可以启用对该新用户的跟踪。请参阅启用
SQL 跟踪。
有关 task() 和 admin() 函数的更多信息,请参阅《GBase 8s SQL 指南:语法》。



GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 561 -


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 562 -