13.1 使用前提
DBMS_PAGE 包的使用依赖 dbms_binary 包。所以,在创建 DBMS_PAGE 包之前,请先成功创建 dbms_binary 包。
13.2 索引页
dbms_PAGE 系统包的索引页信息。
13.2.1 数据类型
dbms_page 包的索引页部分所用到的变量和记录类型,如下统一说明:
包内变量和记录类型 | 解释 |
---|---|
dph_t 类型 | 用于承载页类型及数据页头的所有信息包括:记录数、用户记录数、堆栈底部偏移、堆栈顶部偏移、分支号、碎片空间起始偏移、最小记录偏移、最大记录偏移、外部记录信息、已用空间 |
dpih_t 类型 | 用于承载索引数据头的所有信息,包括:在 B 树中的层次、索引号、B 树中叶节点所在的段的组号、B 树中叶节点所在的段文件号、B 树中叶节点所在的段的页号、B 树中叶节点所在的段的偏移、B 树中内节点所在段的组号、B 树中内节点所在段的文件号、B 树中内节点所在段的页号、B 树中内节点所在段的偏移 |
dpich_t 类型 | 用于承载索引控制头的所有信息,包括:下一个 rowid、索引的已用空间、B 树中所有记录数、目前 identity 值 |
dps_t 类型 | 用于承载页空间使用状况的信息,包括:堆底偏移、堆顶偏移、已用字节数、空闲字节数、使用率、堆顶剩余空间、碎片空间大小、碎片空间占总剩余比率、最大可插入记录长度 |
rec_t 类型 | 用于承载记录相关信息,包括:记录序号、记录偏移、记录长度、是否被删除、rowid 或聚簇索引 id、回滚地址-文件号、回滚地址-页号、回滚地址-偏移 |
free_list_t 类型 | 用于承载单个碎片空间的相关信息,包括:碎片偏移、碎片长度 |
ctl_bit_arr_t 类型 | 用于承载控制位的 tinyint 类型的数组 |
DPH_ARR_T 类型 | dph_t 类型的数组 |
DPIH_ARR_T 类型 | DPIH_T 类型的数组 |
DPICH_ARR_T 类型 | DPICH_T 类型的数组 |
DPS_ARR_T 类型 | DPS_T 类型的数组 |
REC_ARR_T 类型 | REC_T 类型的数组 |
FREE_LIST_ARR_T 类型 | FREE_LIST_T 类型的数组 |
13.2.2 相关方法
DBMS_PAGE 包中的索引页部分所包含的过程和函数详细介绍如下:
- data_page_head_load/ data_page_head_get
获取数据页头信息。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_HEAD_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
INFO OUT DPH_T
);
语法如下:
FUNCTION DATA_PAGE_HEAD_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN DPH_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
- data_page_ind_head_load/ data_page_ind_head_get
获取索引数据页头信息。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_IND_HEAD_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
INFO OUT DPIH_T
);
语法如下:
FUNCTION DATA_PAGE_IND_HEAD_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN DPIH_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
- data_page_ind_ctl_head_load/ data_page_ind_ctl_head_get
获取索引控制页头信息。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_IND_CTL_HEAD_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
INFO OUT DPICH_T
);
语法如下:
FUNCTION DATA_PAGE_IND_CTL_HEAD_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN DPICH_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
- DATA_PAGE_SPACE_INFO_LOAD/ DATA_PAGE_SPACE_INFO_GET
获取页空间使用状况信息。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_SPACE_INFO_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
INFO OUT DPS_T
);
语法如下:
FUNCTION DATA_PAGE_SPACE_INFO_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN DPS_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
- data_page_rec_by_slot_no_load/ data_page_rec_by_slot_no_get
获取指定序号的记录。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_REC_BY_SLOT_NO_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
SLOT_NO IN SMALLINT,
REC OUT REC_T
);
语法如下:
FUNCTION DATA_PAGE_REC_BY_SLOT_NO_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
SLOT_NO IN SMALLINT
) RETURN REC_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
-
slot_no
记录序号。
- data_page_ctl_bit_by_slot_no_load/data_page_ctl_bit_by_slot_no_get
获取指定序号的记录的控制位。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_CTL_BIT_BY_SLOT_NO_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
SLOT_NO IN SMALLINT,
COL_NUM IN SMALLINT,
CTL_BIT OUT CTL_BIT_ARR_T
);
语法如下:
FUNCTION DATA_PAGE_CTL_BIT_BY_SLOT_NO_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
SLOT_NO IN SMALLINT,
COL_NUM IN SMALLINT
) RETURN CTL_BIT_ARR_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
-
slot_no
记录序号。
-
col_num
要取得控制位的个数。
- data_page_load_free_list/ data_page_get_free_list
获取所有碎片空间大小及偏移。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_LOAD_FREE_LIST(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
NO IN SMALLINT,
FREE_LIST OUT FREE_LIST_ARR_T
);
语法如下:
FUNCTION DATA_PAGE_GET_FREE_LIST(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
NO IN SMALLINT
)RETURN FREE_LIST_ARR_T;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
-
no
要取到第几个空闲页。
- data_page_tid_load/ data_page_tid_get
输入表空间号、文件号及页号,获得表 id。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_TID_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
TID OUT BIGINT
);
语法如下:
FUNCTION DATA_PAGE_TID_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN INT;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
- data_page_tname_load/ data_page_tname_get
输入表空间号、文件号及页号,输出表名。过程和函数功能相同。
语法如下:
PROCEDURE DATA_PAGE_TNAME_LOAD(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT,
TNAME OUT VARCHAR(35)
);
语法如下:
FUNCTION DATA_PAGE_TNAME_GET(
TS_ID IN SMALLINT,
FILE_ID IN SMALLINT,
PAGE_NO IN INT
)RETURN VARCHAR;
参数详解
-
ts_id
表空间 id。
-
file_id
文件号。
-
page_no
页号。
13.2.3 举例说明
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,'dbms_binary');
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_PAGE');
例 1 获取数据页头信息的,利用包内类型 DPH_ARR_T 以及过程 DATA_PAGE_HEAD_LOAD,这里假设 0 号表空间的 0 号文件 32 号页是一个数据页:
DECLARE
INFO DBMS_PAGE.DPH_ARR_T;
BEGIN
INFO = NEW DBMS_PAGE.DPH_T[1];
DBMS_PAGE.DATA_PAGE_HEAD_LOAD(0,0,32,INFO[1]);
SELECT * FROM ARRAY INFO;
END;
/
输出结果(具体数值取决于实际状况):
N_SLOT N_REC HEAP_LOW HEAP_HIGH BRANCH_NO FREE_LIST_OFF REC_MIN_OFF REC_MAX_OFF EXTERNAL USED_BYTE
4 2 155 0 0 98 82 90 <NULL> 152
例 2 获取页内所有用户记录的信息,利用包内类型 DPH_T、REC_T、REC_ARR_T 以及过程 DATA_PAGE_HEAD_LOAD、DATA_PAGE_REC_BY_SLOT_NO_LOAD,这里假设 4 号表空间的 0 号文件 32 号页是一个数据页,并存储了两行记录:
DECLARE
HEAD DBMS_PAGE.DPH_T;
INFO dbms_page.REC_ARR_T;
BEGIN
DBMS_PAGE.DATA_PAGE_HEAD_LOAD(4,0,32,HEAD);
INFO = NEW dbms_page.REC_T[HEAD.N_REC];
FOR I IN 1..HEAD.N_REC LOOP
DBMS_PAGE.DATA_PAGE_REC_BY_SLOT_NO_LOAD(4,0,32,I,INFO[I]);
END LOOP;
SELECT * FROM ARRAY INFO;
END;
/
输出结果如下(具体数值取决于实际状况):
slot_no OFFSET len is_del trx_id clu_rowid roll_addr_file roll_addr_page roll_addr_off
1 117 19 0 2705 33559296 0 2 0
2 136 19 0 2706 50336512 0 3 0
13.3 INODE 页
Inode 页用于存储 inode 控制块信息,inode 控制块用于存储段的属性信息,每个 inode 控制块对应一个段。Inode 页结构包括通用页头、inode 页链接、以及 inode 控制块信息。inode 控制块结构包括段号、半满簇中使用页的个数、空闲簇链表、半满簇链表、满簇链表。
13.3.1 数据类型
dbms_page 包的 INODE 页部分所用到的变量和记录类型,如下统一说明:
包内变量和记录类型 | 解释 |
---|---|
inode_ph_t 类型 | 用于承载 inode 页头的所有信息,包括:所属表空间 id、当前页文件 id、当前页页号、前一个页的文件 id、前一个页页号、后一个页文件 id、后一个页页号、页类型、校验和、lsn |
inode_page_link_t 类型 | 用于承载 inode 页的链接信息,包括:前一个 inode 页的文件 id、页号与偏移量,后一个 inode 页的文件 id、页号与偏移量 |
inode_t 类型 | 用于承载 inode 项的所有信息,包括:段 id、半满簇中使用页数、空闲簇个数、第一个空闲簇描述项的文件 id、第一个空闲簇描述项的页号、到下一个空闲簇描述项的偏移量、最后一个空闲簇描述项的文件 id、最后一个空闲簇描述项的页号、到下一个空闲簇描述项的偏移量、半满簇个数、第一个半满簇描述项的文件 id、第一个半满簇描述项的页号、到下一个半满簇描述项的偏移量、最后一个半满簇描述项的文件 id、最后一个半满簇描述项的页号、到下一个半满簇描述项的偏移量、满簇个数、第一个满簇描述项的文件 id、第一个满簇描述项的页号、到下一个满簇描述项的偏移量、最后一个满簇描述项的文件 id、最后一个满簇描述项的页号、到下一个满簇描述项的偏移量 |
INODE_PH_ARR_T 类型 | INODE_PH_T 类型的数组 |
INODE_ARR_T 类型 | INODE_T 类型的数组 |
13.3.2 相关方法
DBMS_PAGE 包中的 INODE 页部分所包含的过程和函数详细介绍如下:
- dbms_page. ipage_head_load/ ipage_head_get
获得 inode 页中页头信息。过程和函数功能相同。
语法如下:
PROCEDURE IPAGE_HEAD_LOAD(
PAGE IN VARBINARY,
INFO OUT INODE_PH_T
);
FUNCTION IPAGE_HEAD_GET(
PAGE IN VARBINARY
)RETURN INODE_PH_T;
参数详解
-
page
页内容。
- dbms_page. ipage_nth_inode_load/ ipage_nth_inode_get
获得 inode 页中第 n 个 inode 项的信息。过程和函数功能相同。
语法如下:
PROCEDURE IPAGE_NTH_INODE_LOAD(
PAGE IN VARBINARY,
N IN SMALLINT,
INFO OUT INODE_T
);
FUNCTION IPAGE_NTH_INODE_GET(
PAGE IN VARBINARY,
N IN SMALLINT
)RETURN INODE_T;
参数详解
-
page
页内容。
-
n
第几个 inode 项。
- dbms_page. ipage_all_inodes_load/ ipage_all_inodes_get
获得 inode 页中所有 inode 项的信息。过程和函数功能相同。
语法如下:
PROCEDURE IPAGE_ALL_INODES_LOAD(
PAGE IN VARBINARY,
INFO OUT INODE_ARR_T
);
FUNCTION IPAGE_ALL_INODES_GET(
PAGE IN VARBINARY
)RETURN INODE_ARR_T;
参数详解
-
page
页内容。
13.3.3 举例说明
使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,'dbms_binary');
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_PAGE');
例 1 获取某 inode 页的页头信息
DECLARE
PAGE8 VARBINARY;
info dbms_page.INODE_PH_ARR_T;
BEGIN
INFO = NEW dbms_page.INODE_PH_T[1];
DBMS_PAGE.PAGE_LOAD(0,0,8,PAGE8);
dbms_page.ipage_HEAD_LOAD(PAGE8,info[1]);
select * from array info;
END;
/
结果如下 (具体数值取决于实际状况):
TSID SELF_FILE_ID SELF_PAGE_NO PREV_FILE_ID PREV_PAGE_NO NEXT_FILE_ID
NEXT_PAGE_NO PAGE_TYPE CHECKSUM LSN
0 0 8 -1 -1 0 9 17 0 15270
例 2 获取某 inode 项的信息
DECLARE
PAGE8 VARBINARY;
info dbms_page.INODE_arr_T;
BEGIN
INFO = NEW dbms_page.INODE_T[10];
DBMS_PAGE.PAGE_LOAD(0,0,8,PAGE8);
dbms_page.IPAGE_NTH_INODE_LOAD(PAGE8,1,info[1]);
select * from array info;
END;
/
执行结果,显示 info 中的内容是一个 INODE_T 记录类型的查询结果,INODE_T 中的信息是获取的某 inode 页中的某个 inode 项的信息(具体数值取决于实际状况)
例 3 获取某 inode 页中所有 inode 项信息
DECLARE
PAGE8 VARBINARY;
INFO DBMS_PAGE.INODE_ARR_T;
BEGIN
DBMS_PAGE.PAGE_LOAD(0,0,8,PAGE8);
DBMS_PAGE.IPAGE_ALL_INODES_LOAD(PAGE8,INFO);
SELECT * FROM ARRAY INFO;
END;
/
执行结果,显示 info 中的内容也就是一个 INODE_arr_T 数组的查询结果,INODE_arr_T 数组中的信息是获取的某 inode 页中所有 inode 项的信息(具体数值取决于实际状况)
13.4 描述页
描述页是用来显示簇信息的页。主要包括簇的上一个链接簇描述项的文件 ID、上一个链接簇描述项的页号、上一个链接簇描述项的偏移、下一个链接簇描述项的文件 ID、下一个链接簇描述项的页号、下一个簇链接描述项的偏移、簇使用情况、本簇所属段 ID 和页使用情况等信息。
13.4.1 数据类型
dbms_page 包的描述页部分所用到的变量和记录类型,如下统一说明:
包内变量和记录类型 | 解释 |
---|---|
desc_item_t 类型 | 用于记录描述项信息。包括: 上一个链接簇描述项的文件 ID、 上一个链接簇描述项的页号、 上一个链接簇描述项的偏移、 下一个链接簇描述项的文件 ID、 下一个链接簇描述项的页号、 下一个簇链接描述项的偏移、 簇使用情况、 本簇所属段 ID、 页使用情况 |
DESC_ITEM_ARR_T 类型 | DESC_ITEM_T 类型数组 |
13.4.2 相关方法
DBMS_PAGE 包中的描述页部分所包含的过程和函数详细介绍如下:
- spage_nth_desc_load/spage_nth_desc_get
获得描述页的第 nth 个描述项信息。
语法如下:
PROCEDURE SPAGE_NTH_DESC_LOAD(
PAGE IN VARBINARY,
NTH IN SMALLINT,
DESC_ITEM OUT DESC_ITEM_T
);
FUNCTION SPAGE_NTH_DESC_GET(
PAGE VARBINARY,
NTH SMALLINT
)RETURN DESC_ITEM_T;
参数详解
-
page
调用接口获取,要判定是否是描述页。
-
nth
用户输入的第 nth 个描述项。
-
spage_all_desc_load/spage_all_desc_get
获得描述页的所有描述项信息,一次最多可以查看 256 个描述页信息。
语法如下:
PROCEDURE SPAGE_ALL_DESC_LOAD(
PAGE IN VARBINARY,
DESC_ITEM OUT DESC_ITEM_ARR_T
);
FUNCTION XDESC_ALL_DESC_GET(
PAGE VARBINARY
)RETURN DESC_ITEM_ARR_T;
参数详解
-
page
调用接口获取,要判定是否是描述页。
13.4.3 举例说明
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,'dbms_binary');
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_PAGE');
例 1 获取 0 号描述页的第 0 个描述项信息
DECLARE
PAGE VARBINARY;
DESC_ITEM DBMS_PAGE.DESC_ITEM_T;
DESC_ITEM_ARR DBMS_PAGE.DESC_ITEM_ARR_T;
BEGIN
DBMS_PAGE.PAGE_LOAD(0, 0, 0, PAGE); //0,0,0分别表示表空间号、文件号、页号
DESC_ITEM_ARR = NEW DBMS_PAGE.DESC_ITEM_T[1];
DBMS_PAGE.SPAGE_NTH_DESC_LOAD(PAGE,0,DESC_ITEM_ARR[1]);
SELECT * FROM ARRAY DESC_ITEM_ARR;
END;
/
将打印如下信息(具体数值取决于实际状况):
PREV_FILE_ID PREV_PAGE_NO PREV_OFFSET NEXT_FILE_ID NEXT_PAGE_NO NEXT_OFFSET STATE SEGID DES_BITMAP
-1 -1 -1 0 2048 148 1202 0 0000000000000111
例 2 获取 0 号描述页的第 0 到第 5 个描述项
DECLARE
PAGE VARBINARY;
I SMALLINT;
DESC_ITEM_ARR DBMS_PAGE.DESC_ITEM_ARR_T;
BEGIN
DBMS_PAGE.PAGE_LOAD(0, 0, 0, PAGE);
DESC_ITEM_ARR = NEW DBMS_PAGE.DESC_ITEM_T[6];
FOR I IN 1..6 LOOP
DBMS_PAGE.SPAGE_NTH_DESC_LOAD(PAGE,I-1,DESC_ITEM_ARR[I]);
END LOOP;
SELECT * FROM ARRAY DESC_ITEM_ARR;
END;
/
将打印如下信息(具体数值取决于实际状况):
PREV_FILE_ID PREV_PAGE_NO PREV_OFFSET NEXT_FILE_ID NEXT_PAGE_NO NEXT_OFFSET STATE SEGID DES_BITMAP
-1 -1 -1 0 2048 148 1202 0 0000000000000111
-1 -1 -1 -1 -1 -1 1202 1 0011111111111111
-1 -1 -1 -1 -1 -1 1202 3 0111111111111111
0 2048 340 -1 -1 -1 1202 4 0010100000000001
-1 -1 -1 -1 -1 -1 1202 5 0011111111111111
-1 -1 -1 -1 -1 -1 1202 7 0011111111111111
例 3 获取 0 号页所有的描述项
DECLARE
PAGE VARBINARY;
DESC_ITEM_ARR DBMS_PAGE.DESC_ITEM_ARR_T;
BEGIN
DBMS_PAGE.PAGE_LOAD(0, 0, 0, PAGE);
DBMS_PAGE.SPAGE_ALL_DESC_LOAD(PAGE, DESC_ITEM_ARR);
SELECT * FROM ARRAY DESC_ITEM_ARR;
END;
/
将打印 0 号页所有的描述项的信息,记录格式同上图。
13.5 控制页
让用户更直观的查看数据库表空间的控制页的信息。
13.5.1 数据类型
dbms_page 包的控制页部分所用到的变量和记录类型,如下统一说明:
包内变量和记录类型 | 解释 |
---|---|
PH_T 类型 | 页头记录类型,包括:表空间 ID、本文件 ID、本文件的 PAGE NO、前一个文件的 FILE ID、前一个文件的 PAGE NO、下一个文件的 FILE ID、下一个文件的 PAGE NO、文件类型、CHECKSUM 检查点、LSN 该页实际刷盘的位置信息。当表空间 ID,文件 ID 均为 0,那 PAGE NO 从 0-6 均是控制页,分别为 0 号控制页,1 号 ID 页,2 号 SEQ 页,3 号提交事务的 last_lcn 页,4 号系统信息页,5 号复制关系已处理的 LCN 页,6 号保留页。PAGE NO 是从 0 开始,若 PAGE NO 为-1 代表该页为空。若 FILE ID 为-1 则代表该项所代表的 FILE 为空 |
P0_TSH_T 类型 | 0 号控制页的表空间头记录类型,包括:LSN、空闲的 INODE 页的数量、INODE FREE 链表中第一个文件号、INODE FREE 链表中第一个页号、INODE FREE 链表中第一个页偏移、INODE FREE 链表中最后一个文件号、INODE FREE 链表中最后一个页号、INODE FREE 链表中最后一个页偏移、全满的 INODE 页的数量、INODE FULL 链表中第一个文件号、INODE FULL 链表中第一个页号、INODE FULL 链表中第一个页偏移、INODE FULL 链表中最后一个文件号、INODE FULL 链表中最后一个页号、INODE FULL 链表中最后一个页偏移、空闲簇的数量、空闲簇链表中第一个文件号、空闲簇链表中第一个页号、空闲簇链表中第一个页偏移、空闲簇链表中最后一个文件号、空闲簇链表中最后一个页号、空闲簇链表中最后一个页偏移、半满簇的数量、半满簇链表中第一个页 ID、半满簇链表中第一个 PAGE NO、半满簇链表中第一个页的偏移、半满簇链表中最后一个页 ID、半满簇链表中最后一个 PAGE NO、半满簇链表中最后一个页的偏移、SYSINDEX 的根页的位置、SYSOBJ 的根页、页大小、一个簇里含有页个数、LOG 日志文件大小 |
P0_FH_T 类型 | 0 号控制页的文件头记录类型,包括:一个文件中页的数量、空闲页的页号 |
P1_INFO_T 类型 | 1 号控制页的描述项记录类型,包括:下一个段 ID、下一个表 ID、下一个视图 ID、下一个用户 ID、下一个索引 ID、下一个存储过程 ID、下一个函数 ID、下一个角色 ID、下一个文件 ID、下一个触发器 ID、下一个约束 ID、下一个模式 ID、下一个序列 ID、下一个 POLICY ID、下一个 DBLINK ID、下一个事务 ID、下一个跟踪 ID、下一个事件 ID、下一个 OPERATOR ID、下一个警告 ID、下一个作业 ID、下一个作业步骤 ID、下一个作业调度 ID、下一个异步复制 ID、下一个包 ID、下一个作业步骤 ID、下一个密码引擎 ID、下一个 OBJECTTYPE ID、下一个 SYNONY ID、下一个 BLOB ID、下一个 MAL ID、下一个 TAG ID、下一个 GROUP ID、下一个 INST ID、下一个 REP ID、下一个未被使用的组 ID、下一个 NEW TRX ID |
SEQ_ITEM_T 类型 | 2 号控制页的 SEQ 记录类型,包括:该页的使用情况、SEQ 的值 |
CPAGE_SEQ_HEAD_T 类型 | 2 号控制页的页头信息类型,包括:申请下一页所在的表空间 ID、申请下一页所在的文件 ID、申请下一页的 PAGENO、页中已使用的 SEQ 项的数量 |
CPAGE_SEQ_INFO_T 类型 | 每个页中使用多少个 SEQ 项的数量类型,包括:该页所在的表空间 ID、该页所在的文件 ID、该页的页号、该页中已使用的 SEQ 项的数量 |
P3_HEAD_T 类型 | 3 号控制页页头记录类型,包括:LAST_LCN 页的表空间 ID、LAST_LCN 页的文件 ID、LAST_LCN 页的文件号、LAST LCN 的数量 |
P3_ITEM_T 类型 | 3 号控制页的描述项记录类型,包括:该页的使用情况、前一个 LCN 的 ID、前一个 TRX 的 ID、前一个 LCN |
P4_DES_T 类型 | 4 号控制页的描述项记录类型,包括:版本号、大小写敏感、编码方式、空串是否等同于 NULL、SITE MAGIC 站点魔数、PRIKEY 解密服务主密钥的 RSA 私钥文件路径、SVR KEY 服务器主密钥、SYSTEM DB KEY 系统数据库的 key、数据库模式、LOG REP TYPE 复制实例类型日志、COORDINATOR ADDR 协调器地址、COORDINATOR PORT 协调器端口、时区 |
P5_HEAD_T 类型 | 5 号控制页页头记录类型,包括:LOG FILE1 的长度以 KB 为单位、LOG FILE2 的长度以 KB 为单位、LOG WRITE FILE 的 SEQ、LOG READ FILE 的 SEQ、LOG READ FILE 的 OFFSET、复制关系已处理的 LAST LCN 的数量 |
P5_ITEM_T 类型 | 5 号控制页的描述项记录类型,包括:该项是否已被使用、REP ID2、上一个 LCN 项 |
PH_ARR_T 类型 | PH_T 类型的数组 |
P0_FH_ARR_T 类型 | P0_FH_T 类型的数组 |
P1_INFO_ARR_T 类型 | P1_INFO_T 类型的数组 |
CPAGE_SEQ_HEAD_ARR_T 类型 | CPAGE_SEQ_HEAD_T 类型的数组 |
CPAGE_SEQ_INFO_ARR_T 类型 | CPAGE_SEQ_INFO_T 类型的数组 |
SEQ_ITEM_ARR_T 类型 | SEQ_ITEM_T 类型的数组 |
P3_HEAD_ARR_T 类型 | P3_HEAD_T 类型的数组 |
LAST_LCN_PAGE_HEAD_ARR_T 类型 | P3_HEAD_T 类型的数组 |
P3_ITEM_ARR_T 类型 | P3_ITEM_T 类型的数组 |
P4_DES_ARR_T 类型 | P4_DES_T 类型的数组 |
P5_HEAD_ARR_T 类型 | P5_HEAD_T 类型的数组 |
P5_ITEM_ARR_T 类型 | P5_ITEM_T 类型的数组 |
13.5.2 相关方法
DBMS_PAGE 包中的控制页部分所包含的过程和函数详细介绍如下:
- PAGE_LOAD
加载数据页。
语法如下:
PROCEDURE PAGE_LOAD(
TS_ID IN INT,
FI_ID IN INT,
PAGE_NO IN INT,
PAGE OUT VARBINARY
);
参数详解
-
TS_ID
表空间 ID。
-
FILE_ID
文件号。
-
PAGE_NO
页号。
-
PAGE
页内容。
- PAGE_HEAD_INFO
获得通用页头信息。过程和函数功能相同。
语法如下:
PROCEDURE PAGE_HEAD_LOAD (
PAGE IN VARBINARY,
PH_INFO OUT PH_T
);
FUCNTION PAGE_HEAD_GET (
PAGE IN VARBINARY
) RETURN PH_T;
参数详解
-
PAGE
页内容。
- CTL_page0_ts_head_LOAD/ CTL_page0_ts_head_GET
获得 0 号页表空间头的信息。
语法如下:
PROCEDURE CTL_PAGE0_TS_HEAD_LOAD (
GHEAD OUT P0_TSH_T
);
FUNCTION CTL_PAGE0_TS_HEAD_GETRETURN P0_TSH_T;
- CTL_page0_fh_LOAD/ ctl_page0_fh_get
获得 0 号页文件头的信息。
语法如下:
PROCEDURE CTL_PAGE0_FH_LOAD (
FHEAD OUT P0_FH_T
);
FUNCTION CTL_PAGE0_FH_GETRETURN P0_FH_T;
- ctl_page1_des_LOAD/ ctl_page1_des_GET
获得 1 号控制页的描述信息。
语法如下:
PROCEDURE CTL_PAGE1_DES_LOAD (
P1DES OUT P1_INFO_T
);
FUNCTION CTL_PAGE1_DES_GETRETURN P1_INFO_T;
- cpage_seq_head_LOAD/ cpage_seq_head_GET
获得 seq 页的 seq 页头信息。
语法如下:
PROCEDURE CPAGE_SEQ_HEAD_LOAD (
PAGE2 IN VARBINARY,
P2DES OUT CPAGE_SEQ_HEAD_T
);
FUNCTION CPAGE_SEQ_HEAD_GET (
PAGE2 IN VARBINARY
) RETURN CPAGE_SEQ_HEAD_T;
参数详解
-
page2
seq 页内容。
- seq_item_all_LOAD/ seq_item_all_GET
获得该页的所有 seq 项的信息。
语法如下:
PROCEDURE SEQ_ITEM_ALL_LOAD (
PAGE2 IN VARBINARY,
P2DES OUT SEQ_ITEM_ARR_T
);
FUNCTION SEQ_ITEM_ALL_GET (
PAGE2 IN VARBINARY
) RETURN SEQ_ITEM_ARR_T;
参数详解
-
page2
seq 页内容。
- ctl_page_seq_count_n_LOAD/ ctl_page_seq_count_n_GET
获得系统中从 offset_n 开始往后 n 页的 seq 页信息并返回(最多 100 页)。
语法如下:
PROCEDURE CTL_PAGE_SEQ_COUNT_N_LOAD (
OFFSET_N IN SMALLINT DEFAULT 0,
N IN SMALLINT DEFAULT 100,
SEQCOUNT OUT CPAGE_SEQ_INFO_ARR_T
);
FUNCTION CTL_PAGE_SEQ_COUNT_N_GET (
OFFSET_N IN SMALLINT DEFAULT 0,
N IN SMALLINT DEFAULT 100
) RETURN CPAGE_SEQ_INFO_ARR_T;
参数详解
-
offset_n
页偏移量。
-
n
从 offset_n 开始往后 n 页。
- CPAGE3_HEAD_GET/CPAGE3_HEAD_LOAD
获得 3 号控制页的页头格式信息并返回。
语法如下:
PROCEDURE CPAGE3_HEAD_LOAD(
P3_HEAD OUT P3_HEAD_T
);
FUNCTION CPAGE3_HEAD_GET RETURN P3_HEAD_T;
- LAST_LCN_PAGE_HEAD_LOAD /LAST_LCN_PAGE_HEAD_GET
获得系统中从 offset_n 开始往后 n 页的 seq 页信息(最多 100 页)。
语法如下:
FUNCTION LAST_LCN_PAGE_HEAD_GET (
OFFSET INT DEFAULT 0,
NUM SMALLINT DEFAULT 100
) RETURN LAST_LCN_PAGE_HEAD_ARR_T;
PROCEDURE LAST_LCN_PAGE_HEAD_LOAD (
OFFSET INT DEFAULT 0,
NUM INT DEFAULT 100,
P_HEAD_ARR OUT LAST_LCN_PAGE_HEAD_ARR_T
);
参数详解
-
OFFSET
页偏移量。
-
NUM
从 offset_n 开始往后 n 页。
- LAST_LCN_PAGE_ITEM_LOAD /LAST_LCN_PAGE_ITEM_GET
获得相应页的 item 信息。
语法如下:
FUNCTION LAST_LCN_PAGE_ITEM_GET (
TS_ID SMALLINT,
FILE_ID SMALLINT,
PAGE_NO INT
) RETURN P3_ITEM_ARR_T;
PROCEDURE LAST_LCN_PAGE_ITEM_LOAD (
TS_ID SMALLINT,
FILE_ID SMALLINT,
PAGE_NO INT,
P3_ITEM_ARR OUT P3_ITEM_ARR_T
);
参数详解
-
TS_ID
表空间号。
-
FILE_ID
文件号。
-
PAGE_NO
页号。
- CPAGE3_LCN_MAX_CNT_GET
返回一个 last lcn 页能存的最大 last lcn item 项的个数。
语法如下:
FUNCTION CPAGE3_LCN_MAX_CNT_GET RETURN INT;
- CPAGE4_DES_LOAD/CPAGE4_DES_GET
获得 4 号控制页的描述信息。
语法如下:
PROCEDURE CPAGE4_DES_LOAD(
P4_INFO OUT P4_DES_T
);
FUNCTION CPAGE4_DES_GET RETURN P4_DES_T;
- CPAGE5_HEAD_LOAD/CPAGE5_HEAD_GET
获得 5 号控制页的页头格式信息。
语法如下:
PROCEDURE CPAGE5_HEAD_LOAD(
P5_HEAD OUT P5_HEAD_T
);
FUNCTION CPAGE5_HEAD_GETRETURN P5_HEAD_T;
- CPAGE5_ITEM_load/ CPAGE5_ITEM_GET
获得 5 号控制页的描述信息。
语法如下:
PROCEDURE CPAGE5_ITEM_LOAD (
P5DES OUT P5_ITEM_ARR_T
);
FUNCTION CPAGE5_ITEM_GETRETURN P5_ITEM_ARR_T;
13.5.3 举例说明
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,'dbms_binary');
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_PAGE');
例 取得通用页头信息 0-3
DECLARE
PAGE0 VARBINARY;
PAGE1 VARBINARY;
PHINFO DBMS_PAGE.PH_T;
PHINFO_ARR DBMS_PAGE.PH_ARR_T;
BEGIN
PHINFO_ARR = NEW DBMS_PAGE.PH_T[4];
FOR I IN 1..4 LOOP
DBMS_PAGE.PAGE_LOAD(0,0,I-1,PAGE0);
//DBMS_PAGE.PAGE_HEAD_LOAD(PAGE0,PHINFO);
PHINFO_ARR[I] = DBMS_PAGE.PAGE_HEAD_GET(PAGE0);
END LOOP;
SELECT * FROM ARRAY PHINFO_ARR;
END;
/
结果如下:
TS_ID SELF_FILE_ID SELF_PAGE_NO PREV_FILE_ID PREV_PAGE_NO NEXT_FILE_ID NEXT_PAGE_NO PAGE_TYPE CHECKSUM LSN
0 0 0 -1 -1 -1 -1 19 0 13971
0 0 1 -1 -1 -1 -1 -1 0 14681
0 0 2 -1 -1 -1 -1 -1 0 1
0 0 3 -1 -1 -1 -1 99 0 1