DBMS_SPACE 包

为了展示所有物理对象(文件、页)和逻辑对象(表空间、簇、段)的存储空间信息。通过DBMS_SPACE包来获取表空间(不包含HUGE表空间)、文件、页、簇、段的内容。

18.1 数据类型

DBMS_SPACE包中涉及到的变量和记录类型。如下统一说明:

包内变量和记录类型 解释
ts_t 表空间记录类型,用于记录表空间的信息,包括:表空间ID、表空间名、表空间类型:1 DB类型,2 临时文件组、表空间状态、表空间的最大空间、表空间的总大小(页)、包含文件的个数
ts_arr_t 表空间记录类型数组
TS_ALL_ARR_T 表空间ID数组
file_t 文件记录类型,用于记录文件的信息,包括:文件路径、文件创建时间、文件读写状态 1 读,2写文件修改的时间、修改的事务id 、文件的总大小(M)、文件的空闲大小(M)、数据文件中连续空白页的起始页号、读页个数、写页个数、页大小(K)、读请求个数、写请求个数、文件可扩展标记、文件最大大小(M)、文件每次扩展大小(M)、文件包含的总描述页的数目
file_arr_t 文件记录类型数组
FILE_ALL_ARR_T 文件的ID数组
seg_t 段记录类型,用于记录段的信息,包括:表空间id、段inode项的文件id、段inode项的页号、段inode项的页偏移、全满簇的个数、半满簇的个数、空闲簇的个数
seg_arr_t 段记录类型数组
SEG_ID_ARR_T 段id数组
extent_t 簇记录类型,用于记录簇的信息,包括:表空间号、段id、簇状态、簇的页标记位图、簇描述项的文件id、簇描述项所在页号、簇描述项的页偏移、簇的起始页号、簇的终止页号、下一个簇描述项的文件号id、下一个簇描述项的页号、下一个簇描述项的页偏移
extent_arr_t 簇记录类型数组
EXTENT_SIZE 簇的大小(页为单位)
page_addr_t 页地址记录类型,用于记录页地址的信息,包括:表空间id,文件id,页号
page_addr_arr_t 页地址记录类型数组
page_n 描述页能描述的页数

18.2 相关方法

DBMS_SPACE包中包含的过程和函数如下详细介绍:

  1. ts_load/ ts_get

根据输入的表空间id,获得表空间信息。过程和函数功能相同。

语法如下:

procedure ts_load(

	tsid in smallint,

	ts_arr out ts_arr_t

);

语法如下:

function ts_get (

	tsid in smallint

)return ts_arr_t;

参数详解

  • tsid表空间id。
  • ts_arr_T表空间记录类型数组。
  1. TS_N_LOAD / TS_N_GET

获得数据库中表空间的个数。过程和函数功能相同。

语法如下:

PROCEDURE TS_N_LOAD(

	NUMBER OUT INT

);

语法如下:

FUNCTION TS_N_GET

RETURN INT;

参数详解

  • NUMBER表空间的个数。
  1. TS_ALL_LOAD/ ts_all_get

获得所有表空间的ID。过程和函数功能相同。

语法如下:

PROCEDURE TS_ALL_LOAD(

	TS_ALL_ARR OUT TS_ALL_ARR_T,

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

);

语法如下:

function ts_all_get(

	offset in int default 0,

	num in int default 100

) return TS_ALL_ARR_T;

参数详解

  • offset数组起始位置。
  • num数组长度
  • TS_ALL_ARR表空间ID
  1. FILE_LOAD/ FILE_GET

根据输入的表空间id、文件id,获得文件信息。过程和函数功能相同。

语法如下:

PROCEDURE FILE_LOAD(

	TS_ID IN SMALLINT,

	FILE_ID IN SMALLINT,

	FILE_ARR OUT FILE_ARR_T

);

语法如下:

FUNCTION FILE_GET(

	TS_ID IN SMALLINT,

	FILE_ID IN SMALLINT

) RETURN FILE_ARR_T;

参数详解

  • tsid表空间id。
  • file_id文件号。
  • FILL_ARR_T文件记录类型数组。
  1. FILE_ALL_LOAD/ FILE_ALL_GET

获得所有文件的ID。过程和函数功能相同。

语法如下:

PROCEDURE FILE_ALL_LOAD(

	TS_ID IN SMALLINT,

	FILE_ALL_ARR OUT FILE_ALL_ARR_T,

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

);

语法如下:

FUNCTION FILE_ALL_GET(

	TS_ID IN SMALLINT,

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

)RETURN FILE_ALL_ARR_T;

参数详解

  • tsid表空间id。
  • FILE_ALL_ARR文件的ID。
  • OFFSET数组起始位置。
  • NUM数组的长度。
  1. SEG_LOAD_BY_ID/SEG_GET_BY_ID

根据输入的表空间id、段号获得段信息。过程和函数功能相同。

语法如下:

PROCEDURE SEG_LOAD_BY_ID(

	TS_ID IN SMALLINT,

	SEGID IN INT,

	SEG_INFO OUT SEG_T

);

语法如下:

FUNCTION SEG_GET_BY_ID(

	TS_ID IN SMALLINT,

	SEGID IN INT

)RETURN SEG_T;

参数详解

  • tsid表空间id。
  • segid 段号。
  • SEG_INFO段的信息。
  • SEG_T段记录类型。
  1. SEG_LOAD_BY_HEADER/ SEG_GET_BY_HEADER

根据输入的表空间id、段头的文件号、页号、页内偏移,获得段信息,其中页内偏移取值只能为62或72。过程和函数功能相同。

语法如下:

PROCEDURE SEG_LOAD_BY_HEADER(

	TS_ID IN SMALLINT,

	HEADER_FILE_ID IN SMALLINT,

	HEADER_PAGE_NO IN INT,

	HEADER_OFFSET IN SMALLINT,

	SEG_INFO OUT SEG_T

);

语法如下:

FUNCTION SEG_GET_BY_HEADER(

	TS_ID IN SMALLINT,

	HEADER_FILE_ID IN SMALLINT,

	HEADER_PAGE_NO IN INT,

	HEADER_OFFSET IN SMALLINT

)RETURN SEG_T;

参数详解

  • tsid表空间id。
  • file_id文件号。
  • header_file_id段头文件号。
  • header_page_no段头页号。
  • header_offset段头偏移量。
  • SEG_INFO段的信息。
  1. SEG_ALL_LOAD/ seg_all_get

根据表空间id、数组相对起始位置、数组长度,获得数据库中表空间中所有段的id信息。过程和函数功能相同。

语法如下:

PROCEDURE SEG_ALL_LOAD(

	TS_ID IN SMALLINT,

	SEG_ID_ARR OUT SEG_ID_ARR_T,

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

);

语法如下:

FUNCTION SEG_ALL_GET(

	TS_ID IN SMALLINT,

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

)RETURN SEG_ID_ARR_T;

参数详解

  • tsid表空间id。
  • offset数组起始位置。
  • num数组长度。
  • seg_id_arr_t段id信息。
  1. SEG_EXTENT_LST_LOAD/ seg_extent_lst_get

根据输入的表空间id、段号、链表类型、链表方向、链表相对起始位置、指定链表长度,获得full或free链表的信息。过程和函数功能相同。

语法如下:

PROCEDURE SEG_EXTENT_LST_LOAD(

	TS_ID IN SMALLINT,

	SEGID IN INT,

	EXTENT_ARR OUT EXTENT_ARR_T,

	LINKTYPE IN VARCHAR(5) DEFAULT 'FULL',

	DIRECT IN VARCHAR(10) DEFAULT 'FORWARD',

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

);

语法如下:

function seg_extent_lst_get(

	tsid in smallint,

	segid in smallint,

	LINKTYPE IN VARCHAR(5) DEFAULT 'FULL',

	DIRECT IN VARCHAR(10) DEFAULT 'FORWARD',

	OFFSET IN INT DEFAULT 1,

	num in int default 100,

) return extent_arr_t;

参数详解

  • tsid表空间id。
  • segid段id。
  • linktype链表类型。
  • direct链表方向。
  • offset链表相对起始位置。
  • num指定链表长度。
  • EXTENT_ARR_t簇信息结构体链表
  1. EXTENT_SIZE_LOAD/ extent_size_get

获得簇的大小(页为单位)。过程和函数功能相同。

语法如下:

PROCEDURE EXTENT_SIZE_LOAD(

	EXTENT_SIZE OUT INT

);

语法如下:

function extent_size_get return int;
  1. EXTENT_XDESC_PAGE_NO_LOAD/extent_xdesc_page_no_get

根据输入的表空间id、文件id,获得所有簇描述页的信息。过程和函数功能相同。

语法如下:

PROCEDURE EXTENT_XDESC_PAGE_NO_LOAD(

	TS_ID SMALLINT,

	FILE_ID SMALLINT,

	XPAGE_ADDR_ARR OUT PAGE_ADDR_ARR_T,

	OFFSET INT DEFAULT 1,

	NUM INT DEFAULT 100

);

语法如下:

function extent_xdesc_page_no_get(

	ts_id in smallint,

	file_id in smallint,

	offset in int default 0,

	num in int default 100,

)return page_addr_arr_t;

参数详解

  • tsid表空间id。
  • file_id文件id。
  • offset数组的起始位置。
  • num指定输出的长度。
  • page_addr_arr_t页地址记录类型数组。
  1. PAGE_N_LOAD/ PAGE_N_GET

获得一个描述页能描述的页数。过程和函数功能相同。

语法如下:

PROCEDURE PAGE_N_LOAD(

	PAGE_N OUT INT

);

语法如下:

FUNCTION PAGE_N_GET

RETURN INT;

参数详解

  • PAGE_N描述页能描述的页数。
  1. IPAGE_NO_ALL_LOAD/ IPAGE_NO_ALL_GET

输入表空间id、inode页链表类型full或free链表方向、链表相对起始位置、指定链表长度,输出所有inode页的页号。过程和函数功能相同。

语法如下:

PROCEDURE IPAGE_NO_ALL_LOAD(

	TS_ID IN SMALLINT,

	PAGE_ADDR_ARR OUT PAGE_ADDR_ARR_T ,

	LINKTYPE IN VARCHAR(5) DEFAULT 'FULL',

	DIRECT IN VARCHAR(10) DEFAULT 'FORWARD',

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

);

语法如下:

FUNCTION IPAGE_NO_ALL_GET(

	TS_ID IN SMALLINT,

	LINKTYPE IN VARCHAR(5) DEFAULT 'FULL',

	DIRECT IN VARCHAR(10) DEFAULT 'FORWARD',

	OFFSET IN INT DEFAULT 1,

	NUM IN INT DEFAULT 100

)RETURN PAGE_ADDR_ARR_T;

参数详解

  • tsid表空间id。
  • PAGE_ADDR_ARR_T页地址记录类型数组。
  • linktypeinode页链表类型:full或free。
  • direct链表的方向。
  • offset链表的相对起始位置。
  • num指定链表长度。

18.3 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程

SP_CREATE_SYSTEM_PACKAGES(1)创建系统包。

SP_CREATE_SYSTEM_PACKAGES(1);

例1 获取表空间信息(表空间ID、表空间名、表空间类型:1 DB类型,2 临时文件组、表空间状态、表空间的最大空间、表空间的总大小(页)、包含文件的个数)。

DECLARE

	TS_INFO DBMS_SPACE.TS_ARR_T;

 BEGIN

	TS_INFO = DBMS_SPACE.TS_GET(4);

	IF TS_INFO IS NOT NULL

 THEN

		SELECT * FROM ARRAY TS_INFO;

 ELSE PRINT 'TABLESPACE IS NULL';

 END IF;

END;

/

结果:

行号 ID NAME CACHE TYPE STATUS MAX_SIZE TOTAL_SIZE FILE_NUM

---------- ---------- ---- ----- ---------- ---------- -------------------

1   4   MAIN  1   0      0               16384       1

例2 获得数据库中表空间的个数

DECLARE

TS_NUM INT;

BEGIN

TS_NUM = DBMS_SPACE.TS_N_GET;

PRINT 'TS_NUM:';

PRINT TS_NUM;

END;

/

结果:

TS_NUM:

5 --个数根据实际表空间个数不同而不同,不包括huge表空间。

例3获得文件信息(文件路径、文件创建时间、文件读写状态 1读,2写文件修改的时间、修改的事务id、文件的总大小(M)、文件的空闲大小(M)、数据文件中连续空白页的起始页号、读页个数、写页个数、页大小(K)、读请求个数、写请求个数、文件可扩展标记、文件最大大小(M)、文件每次扩展大小(M)、文件包含的总描述页的数目)

DECLARE

	FILE_INFO DBMS_SPACE.FILE_ARR_T;

BEGIN

	FILE_INFO = DBMS_SPACE.FILE_GET(4,0);

	IF FILE_INFO IS NOT NULL

	THEN

		SELECT * FROM ARRAY FILE_INFO;

	ELSE PRINT 'FILE IS NULL';

	END IF;

END;

/

结果:

行号 PATH CREATE_TIME MODIFY_TIME TOTAL_SIZE FREE_SIZE FREE_PAGE_NO PAGE_SIZE
AUTOEXTEND MAX_SIZE NEXT_SIZE

--------- ------------------------------- --------------------------

1 d:\database0718\DAMENG\MAIN.DBF 2012-07-19 09:47:55.000000 2012-08-07
09:43:33.000000 16384 16348 368 8192 1 0 0

微信扫码
分享文档
扫一扫
联系客服