DBMS_PAGE 包

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包中的索引页部分所包含的过程和函数详细介绍如下:

  1. 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

页号。

  1. 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

页号。

  1. 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

页号。

  1. 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

页号。

  1. 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

记录序号。

  1. 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

要取得控制位的个数。

  1. 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

要取到第几个空闲页。

  1. 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

页号。

  1. 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页部分所包含的过程和函数详细介绍如下:

  1. 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

页内容。

  1. 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项。

  1. 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包中的描述页部分所包含的过程和函数详细介绍如下:

  1. 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个描述项。

  1. 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包中的控制页部分所包含的过程和函数详细介绍如下:

  1. 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

页内容。

  1. 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

页内容。

  1. 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;
  1. 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;
  1. 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;
  1. 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页内容。

  1. 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页内容。

  1. 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页。

  1. 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;
  1. 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页。

  1. 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

页号。

  1. CPAGE3_LCN_MAX_CNT_GET

返回一个last lcn页能存的最大last lcn item项的个数。

语法如下:

FUNCTION CPAGE3_LCN_MAX_CNT_GET RETURN INT;
  1. 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;
  1. CPAGE5_HEAD_LOAD/CPAGE5_HEAD_GET

获得5号控制页的页头格式信息。

语法如下:

PROCEDURE CPAGE5_HEAD_LOAD(

	P5_HEAD OUT P5_HEAD_T

);

function CPAGE5_HEAD_GETreturn p5_head_t;
  1. 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
微信扫码
分享文档
扫一扫
联系客服