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
INFO = NEW dbms_page.INODE_T[150];
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