99
• 管管管管管管管管管管 • 管管管管管管管 • 管管管 • 管管管管 • 管管管管管管管 Oracle 管管管管管管管管管管

Oracle 数据库的对象及其管理

Embed Size (px)

DESCRIPTION

Oracle 数据库的对象及其管理. 管理表空间和数据文件 存储结构和关系 管理表 管理索引 维护数据完整性. 主要内容. 说明数据库的逻辑结构 创建表空间 使用不同方法改变表空间大小 改变表空间的状态和存储设置 重定位表空间 准备必要的表空间. 数据文件. 概述. 控制文件. 重做日志 文件. 数据库. 数据库结构. 数据库. 表空间. 数据文件. 逻辑的. 物理的. 段. 范围. Oracle 块. O/S 块. SYSTEM 表空间包含 : 数据字典信息 SYSTEM 回滚段. 非 SYSTEM 表空间包含 : - PowerPoint PPT Presentation

Citation preview

Page 1: Oracle 数据库的对象及其管理

• 管理表空间和数据文件• 存储结构和关系• 管理表• 管理索引• 维护数据完整性

Oracle 数据库的对象及其管理Oracle 数据库的对象及其管理

Page 2: Oracle 数据库的对象及其管理

主要内容主要内容– 说明数据库的逻辑结构 – 创建表空间– 使用不同方法改变表空间大小 – 改变表空间的状态和存储设置– 重定位表空间 – 准备必要的表空间

– 说明数据库的逻辑结构 – 创建表空间– 使用不同方法改变表空间大小 – 改变表空间的状态和存储设置– 重定位表空间 – 准备必要的表空间

Page 3: Oracle 数据库的对象及其管理

概述概述

数据库

控制文件

重做日志文件数据文件

Page 4: Oracle 数据库的对象及其管理

数据库

逻辑的 物理的

表空间 数据文件

O/S 块Oracle 块

范围

数据库结构数据库结构

Page 5: Oracle 数据库的对象及其管理

SYSTEM 表空间和非 SYSTEM 表空间SYSTEM 表空间和非 SYSTEM 表空间

• SYSTEM 表空间包含 :

• 数据字典信息• SYSTEM 回滚段

• SYSTEM 表空间包含 :

• 数据字典信息• SYSTEM 回滚段

• 非 SYSTEM 表空间包含 :

• 回滚段• 临时段• 应用数据• 应用索引

• 非 SYSTEM 表空间包含 :

• 回滚段• 临时段• 应用数据• 应用索引

Page 6: Oracle 数据库的对象及其管理

创建表空间创建表空间

CREATE TABLESPACE app_data

DATAFILE ‘DISK4/app01.dbf’ SIZE 100M,

‘DISK5/app02.dbf’ SIZE 100M

MINIMUM EXTENT 500K

DEFAULT STORAGE (INITIAL 500K NEXT 500K M

AXEXTENTS 500 PCTINCREASE 0);

CREATE TABLESPACE app_data

DATAFILE ‘DISK4/app01.dbf’ SIZE 100M,

‘DISK5/app02.dbf’ SIZE 100M

MINIMUM EXTENT 500K

DEFAULT STORAGE (INITIAL 500K NEXT 500K M

AXEXTENTS 500 PCTINCREASE 0);

例子例子

Page 7: Oracle 数据库的对象及其管理

存储参数 存储参数

以下参数影响段的存储分配 :

• INITIAL

• NEXT

• MAXEXTENTS

• MINEXTENTS

• PCTINCREASE

以下参数影响段的存储分配 :

• INITIAL

• NEXT

• MAXEXTENTS

• MINEXTENTS

• PCTINCREASE

Page 8: Oracle 数据库的对象及其管理

临时表空间临时表空间

• 排序操作使用• 不能包含永久对象• 排序操作使用• 不能包含永久对象

CREATE TABLESPACE sort

DATAFILE ‘DISK2/sort01.dbf’ SIZE 50M

MINIMUM EXTENT 1M

DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEX

TENTS 500 PCTINCREASE 0)

TEMPORARY;

CREATE TABLESPACE sort

DATAFILE ‘DISK2/sort01.dbf’ SIZE 50M

MINIMUM EXTENT 1M

DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEX

TENTS 500 PCTINCREASE 0)

TEMPORARY;

Page 9: Oracle 数据库的对象及其管理

为表空间增加数据文件为表空间增加数据文件

ALTER TABLESPACE app_data

ADD DATAFILE

‘DISK5/app03.dbf’ SIZE 200M;

ALTER TABLESPACE app_data

ADD DATAFILE

‘DISK5/app03.dbf’ SIZE 200M;

表空间表空间 APP_DATAAPP_DATA

app03.dbf 2M

app02.dbf1M

app01.dbf1M

例子例子

Page 10: Oracle 数据库的对象及其管理

数据文件的自动扩展数据文件的自动扩展

ALTER TABLESPACE app_data

ADD DATAFILE

‘DISK6/app04.dbf’ SIZE 200M

AUTOEXTEND ON NEXT 10M

MAXSIZE 500M;

ALTER TABLESPACE app_data

ADD DATAFILE

‘DISK6/app04.dbf’ SIZE 200M

AUTOEXTEND ON NEXT 10M

MAXSIZE 500M;

表空间表空间 APP_ DATAAPP_ DATA

app04.dbf 2M

app03.dbf2M

app01.dbf1M

app02.dbf1M

例子例子

Page 11: Oracle 数据库的对象及其管理

1M

•ALTER DATABASE DATAFILE ‘DISK5/app02.dbf’ RESIZE 200M;•ALTER DATABASE DATAFILE ‘DISK5/app02.dbf’ RESIZE 200M;

表空间表空间 APP_DATAAPP_DATA

app02.dbf1M

手工改变数据文件的大小手工改变数据文件的大小

app01.dbf1M

例子例子

Page 12: Oracle 数据库的对象及其管理

改变存储设置改变存储设置例子例子ALTER TABLESPACE app_data

MINIMUM EXTENT 2M;

ALTER TABLESPACE app_data

DEFAULT STORAGE

(INITIAL 2M NEXT 2M

MAXEXTENTS 999);

ALTER TABLESPACE app_data

MINIMUM EXTENT 2M;

ALTER TABLESPACE app_data

DEFAULT STORAGE

(INITIAL 2M NEXT 2M

MAXEXTENTS 999);

Page 13: Oracle 数据库的对象及其管理

脱机状态 脱机状态 • 脱机的表空间不能进行数据的存取操

作• SYSTEM 表空间和带有活动回滚段的

表空间 均不能脱机

• 脱机的表空间不能进行数据的存取操作• SYSTEM 表空间和带有活动回滚段的

表空间 均不能脱机

ALTER TABLESPACE app_data OFFLINE;ALTER TABLESPACE app_data OFFLINE;

例子例子

Page 14: Oracle 数据库的对象及其管理

移动数据文件 :ALTER TABLESPACE

移动数据文件 :ALTER TABLESPACE

– 表空间 APP_DATA 必须脱机– 目标数据文件必须存在– 表空间 APP_DATA 必须脱机– 目标数据文件必须存在

ALTER TABLESPACE app_data RENAME D

ATAFILE ‘DISK4/app01.dbf’ TO ‘DISK

5/app01.dbf’;

ALTER TABLESPACE app_data RENAME D

ATAFILE ‘DISK4/app01.dbf’ TO ‘DISK

5/app01.dbf’;

例子例子

Page 15: Oracle 数据库的对象及其管理

移动数据文件 : ALTER DATABASE

移动数据文件 : ALTER DATABASE

– 数据库必须已经装配 – 目标数据文件必须存在– 数据库必须已经装配 – 目标数据文件必须存在

ALTER DATABASE RENAME FILE ‘DISK1/

system01.dbf’ TO ‘DISK2/system01.d

bf’;

ALTER DATABASE RENAME FILE ‘DISK1/

system01.dbf’ TO ‘DISK2/system01.d

bf’;

例子例子

Page 16: Oracle 数据库的对象及其管理

表空间的只读状态表空间的只读状态

ALTER TABLESPACE app_data READ

ONLY;

ALTER TABLESPACE app_data READ

ONLY;

表空间表空间 APP_DATAAPP_DATA 只允许进行读操作只允许进行读操作

例子例子

Page 17: Oracle 数据库的对象及其管理

设置表空间为只读 设置表空间为只读

• 表空间必须联机• 没有活动的事务才可以• 表空间不能包含活动的回滚段• 表空间当前一定不能与联机备份有关

• 表空间必须联机• 没有活动的事务才可以• 表空间不能包含活动的回滚段• 表空间当前一定不能与联机备份有关

Page 18: Oracle 数据库的对象及其管理

删除表空间删除表空间

DROP TABLESPACE app_data

INCLUDING CONTENTS;

DROP TABLESPACE app_data

INCLUDING CONTENTS;

以下语句删除以下语句删除 APP_DATAAPP_DATA 表空间及其全表空间及其全部内容。部内容。

例子例子

Page 19: Oracle 数据库的对象及其管理

获得表空间有关信息获得表空间有关信息•DBA_TABLESPACES

• TABLESPACE_NAME

• NEXT_EXTENT

• MAX_EXTENTS

• PCT_INCREASE

• MIN_EXTLEN

• STATUS

• CONTENTS

•DBA_TABLESPACES • TABLESPACE_NAME

• NEXT_EXTENT

• MAX_EXTENTS

• PCT_INCREASE

• MIN_EXTLEN

• STATUS

• CONTENTS

Page 20: Oracle 数据库的对象及其管理

获得数据文件有关信息获得数据文件有关信息

DBA_DATA_FILESDBA_DATA_FILES• FILE_NAME

• TABLESPACE_NAME

• BYTES

• AUTOEXTENSIBLE

• MAXBYTES

• INCREMENT_BY

DBA_DATA_FILESDBA_DATA_FILES• FILE_NAME

• TABLESPACE_NAME

• BYTES

• AUTOEXTENSIBLE

• MAXBYTES

• INCREMENT_BY

Page 21: Oracle 数据库的对象及其管理

• 管理表空间和数据文件• 存储结构和关系• 管理表• 管理索引• 维护数据完整性

Oracle 数据库的对象及其管理Oracle 数据库的对象及其管理

Page 22: Oracle 数据库的对象及其管理

主要内容主要内容

– 列出不同种类的段及其它们的使用由段控制范围的使用

– 说明对象的块空间利用参数的使用– 从数据字典获得存储结构的有关信息– 根据分裂程度和生存范围确定段的位置

– 列出不同种类的段及其它们的使用由段控制范围的使用

– 说明对象的块空间利用参数的使用– 从数据字典获得存储结构的有关信息– 根据分裂程度和生存范围确定段的位置

Page 23: Oracle 数据库的对象及其管理

数据库

逻辑的 物理的

表空间 数据文件

O/S 块Oracle 块

范围

数据库存储层次

Page 24: Oracle 数据库的对象及其管理

段的种类段的种类

表表

簇簇

表分区表分区

索引索引

Page 25: Oracle 数据库的对象及其管理

段的种类段的种类

索引组织表索引组织表索引分区索引分区

回滚段回滚段 临时段临时段

Page 26: Oracle 数据库的对象及其管理

段的种类段的种类

LOBLOB 索引索引 LOBLOB 段段

引导程序引导程序段段

嵌套的表嵌套的表

Page 27: Oracle 数据库的对象及其管理

存储子句的优先级存储子句的优先级

Oracle 缺省表空间

Page 28: Oracle 数据库的对象及其管理

范围的分配和去配范围的分配和去配– 段在以下情况分配

+ 创建 + 扩展+ 修改

– 段在以下情况去配• 删除• 修改• 清除• 自动调整大小 ( 仅回滚段 )

– 段在以下情况分配+ 创建 + 扩展+ 修改

– 段在以下情况去配• 删除• 修改• 清除• 自动调整大小 ( 仅回滚段 )

Page 29: Oracle 数据库的对象及其管理

使用的和空闲的范围使用的和空闲的范围

数据文件数据文件

空闲的范围空闲的范围使用的范围使用的范围文件头文件头

Page 30: Oracle 数据库的对象及其管理

空闲空间合并空闲空间合并

空闲的范围空闲的范围使用的范围使用的范围文件头文件头

之前之前

ALTER TABLESPACE data01 COALESCE;ALTER TABLESPACE data01 COALESCE;

之后之后

Page 31: Oracle 数据库的对象及其管理

数据库块 : 回顾数据库块 : 回顾

• I/O 的最小单位• 由一个或多个 O/S 块组成• 由参数 DB_BLOCK_SIZE 设置• 在数据库创建时设置

• I/O 的最小单位• 由一个或多个 O/S 块组成• 由参数 DB_BLOCK_SIZE 设置• 在数据库创建时设置

Page 32: Oracle 数据库的对象及其管理

数据库块内容数据库块内容

头头

空闲空间空闲空间

数据数据

Page 33: Oracle 数据库的对象及其管理

块空间利用参数块空间利用参数

INITRANSINITRANS

MAXTRANSMAXTRANS

PCTFREEPCTFREE

PCTUSEDPCTUSED

Page 34: Oracle 数据库的对象及其管理

块空间的使用块空间的使用

插入插入

插入插入

插入插入

插入插入

1 2

3 4

PCTFREE=20PCTFREE=20 PCTUSED=40PCTUSED=40

80%80%

80%80%

40%40%

Page 35: Oracle 数据库的对象及其管理

数据字典视图数据字典视图

表空间DBA_TABLESPACES

段DBA_SEGMENTS

数据文件DBA_DATA_FILES

空闲的范围DBA_FREE_SPACE

使用的范围DBA_EXTENTS

Page 36: Oracle 数据库的对象及其管理

查询段的有关信息查询段的有关信息DBA_SEGMENTS

– 一般信息– OWNER

SEGMENT_NAME

– SEGMENT_TYPE

– TABLESPACE_NAME

DBA_SEGMENTS

– 一般信息– OWNER

SEGMENT_NAME

– SEGMENT_TYPE

– TABLESPACE_NAME

– 大小– EXTENTS

– BLOCKS

– 存储设置– INITIAL_EXTENT

– NEXT_EXTENT

– MIN_EXTENTS

– MAX_EXTENTS

– PCT_INCREASE

Page 37: Oracle 数据库的对象及其管理

获得使用的范围信息获得使用的范围信息DBA_EXTENTS

– 标识– OWNER

– SEGMENT_NAME

– EXTENT_ID

– 位置和大小– TABLESPACE_NAME

– RELATIVE_FNO

– FILE_ID

– BLOCK_ID

– BLOCKS

DBA_EXTENTS

– 标识– OWNER

– SEGMENT_NAME

– EXTENT_ID

– 位置和大小– TABLESPACE_NAME

– RELATIVE_FNO

– FILE_ID

– BLOCK_ID

– BLOCKS

Page 38: Oracle 数据库的对象及其管理

检查空闲的范围信息检查空闲的范围信息

DBA_FREE_SPACE

– 位置和大小– TABLESPACE_NAME

– RELATIVE_FNO

– FILE_ID

– BLOCK_ID

– BLOCKS

DBA_FREE_SPACE

– 位置和大小– TABLESPACE_NAME

– RELATIVE_FNO

– FILE_ID

– BLOCK_ID

– BLOCKS

Page 39: Oracle 数据库的对象及其管理

• 管理表空间和数据文件• 存储结构和关系• 管理表• 管理索引• 维护数据完整性

Oracle 数据库的对象及其管理Oracle 数据库的对象及其管理

Page 40: Oracle 数据库的对象及其管理

主要内容主要内容

– 区分不同种类的 Oracle 数据类型– 使用适当的存储设置创建表– 控制表所使用的空间– 分析表检查其完整性及其迁移情况– 从数据字典检索有关表的信息– 不同格式 ROWID 之间的相互转换

– 区分不同种类的 Oracle 数据类型– 使用适当的存储设置创建表– 控制表所使用的空间– 分析表检查其完整性及其迁移情况– 从数据字典检索有关表的信息– 不同格式 ROWID 之间的相互转换

Page 41: Oracle 数据库的对象及其管理

存储用户数据存储用户数据

规则的表规则的表

簇簇

分区的表分区的表

索引组织的表索引组织的表

Page 42: Oracle 数据库的对象及其管理

行结构 行结构

数据库块数据库块行头行头列长度列长度列值列值

Page 43: Oracle 数据库的对象及其管理

Oracle 数据类型Oracle 数据类型

CHAR(N), NCHAR(N)CHAR(N), NCHAR(N)VARCHAR2(N),VARCHAR2(N),NVARCHAR2(N)NVARCHAR2(N)NUMBER(P,S)NUMBER(P,S)DATEDATERAW(N)RAW(N)BLOB, CLOB,BLOB, CLOB,NCLOB, BFILENCLOB, BFILELONG, LONG RAWLONG, LONG RAWROWIDROWID

VARRAYVARRAY

TABLETABLE

REFREF

数据类型数据类型

内置的内置的用户定义的用户定义的

标量标量 关系关系集合集合

Page 44: Oracle 数据库的对象及其管理

ROWID 数据类型ROWID 数据类型

OOOOOO BBBBBBFFF RRR

数据对象号 相对文件号 行号块号

ROWID ROWID 格式格式

– 行的唯一标识符 – 用作行定位– 行的唯一标识符 – 用作行定位

Page 45: Oracle 数据库的对象及其管理

受限的 ROWID受限的 ROWID

– 可以在一个段内确定行– 需要较少空间– 可以在一个段内确定行– 需要较少空间

BBBBBBBB FFFFRRRR

块号 行号 文件号

. .

Page 46: Oracle 数据库的对象及其管理

集合集合– 集合是包含对象的对象– VARRAY 是有次序的元素集合,其中包

括计数和界限– 嵌套的表是带有 TABLE 数据类型列的表

– 集合是包含对象的对象– VARRAY 是有次序的元素集合,其中包

括计数和界限– 嵌套的表是带有 TABLE 数据类型列的表

VARRAYVARRAY 嵌套表嵌套表

Page 47: Oracle 数据库的对象及其管理

创建表创建表CREATE TABLE employees(

empno NUMBER(4),

last_name VARCHAR2(30)

deptno NUMBER(2))

PCTFREE 20 PCTUSED 50

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE data01;

CREATE TABLE employees(

empno NUMBER(4),

last_name VARCHAR2(30)

deptno NUMBER(2))

PCTFREE 20 PCTUSED 50

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE data01;

Page 48: Oracle 数据库的对象及其管理

创建表 : 指导原则创建表 : 指导原则

• 使用较小的标准范围大小以减少 表空间的碎片

• 对于频繁使用并且较小的表可以使用 CACHE 子句

• 使用较小的标准范围大小以减少 表空间的碎片

• 对于频繁使用并且较小的表可以使用 CACHE 子句

Page 49: Oracle 数据库的对象及其管理

PCTFREE 和 PCTUSED 的设置PCTFREE 和 PCTUSED 的设置• 计算 PCTFREE• 计算 PCTFREE

( 平均行大小 初始行大小 ) * 100

平均行大小

• 计算 PCTUSED• 计算 PCTUSED 平均行大小 * 100

100 PCTFREE 可用数据空间

Page 50: Oracle 数据库的对象及其管理

行迁移和链接行迁移和链接更新之前更新之前 更新之后更新之后

Page 51: Oracle 数据库的对象及其管理

拷贝一个存在的表拷贝一个存在的表

CREATE TABLE new_emp

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

NOLOGGING

TABLESPACE data01

AS

SELECT * FROM scott.employees;

CREATE TABLE new_emp

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

NOLOGGING

TABLESPACE data01

AS

SELECT * FROM scott.employees;

Page 52: Oracle 数据库的对象及其管理

改变存储参数和块利用参数改变存储参数和块利用参数

ALTER TABLE scott.employees

PCTFREE 30

PCTUSED 50

STORAGE(NEXT 500K

MINEXTENTS 2

MAXEXTENTS 100);

ALTER TABLE scott.employees

PCTFREE 30

PCTUSED 50

STORAGE(NEXT 500K

MINEXTENTS 2

MAXEXTENTS 100);

Page 53: Oracle 数据库的对象及其管理

手工分配范围手工分配范围

ALTER TABLE scott.employees

ALLOCATE EXTENT(SIZE 500K

DATAFILE ‘DISK3/DATA01.DBF’);

ALTER TABLE scott.employees

ALLOCATE EXTENT(SIZE 500K

DATAFILE ‘DISK3/DATA01.DBF’);

Page 54: Oracle 数据库的对象及其管理

Free space after deleteFree space after deleteUnused blockUnused block

高水位高水位

范围 范围 IDID 0 0 11 22 33 44

范围 范围 IDID 0 0 11 22 33 44

Used blockUsed block

高水位高水位插入之后插入之后

删除之后删除之后

Page 55: Oracle 数据库的对象及其管理

得到高水位 : DBMS_SPACE.UNUS

ED_SPACE 得到高水位 : DBMS_SPACE.UNUS

ED_SPACE

范围 范围 IDID 0 0 11 22 33 44

高水位LAST_USED_EXTENT_FILE_ID, LAST_USED_EXTENT_BLOCK_ID

TOTAL_BLOCKS

UNUSED_BLOCKS

Page 56: Oracle 数据库的对象及其管理

删除之后的空闲空间删除之后的空闲空间未使用的块未使用的块

高水位高水位

去配之前去配之前

使用的块使用的块

未使用空间的去配未使用空间的去配

ALTER TABLE scott.employees

DEALLOCATE UNUSED;

ALTER TABLE scott.employees

DEALLOCATE UNUSED;

去配之后去配之后

Page 57: Oracle 数据库的对象及其管理

清除表清除表

TRUNCATE TABLE scott.employees;TRUNCATE TABLE scott.employees;

范围 范围 IDID 0 0 11

高水位高水位

空闲空间空闲空间

Page 58: Oracle 数据库的对象及其管理

删除表删除表

DROP TABLE scott.departments

CASCADE CONSTRAINTS;

DROP TABLE scott.departments

CASCADE CONSTRAINTS;

Page 59: Oracle 数据库的对象及其管理

分析表结构分析表结构– Oracle 服务器核实每一个数据块的完

整性– 使用 CASCADE 选项可以确认与表有

关的全部索引,并且执行表和索引之间的交叉引用

– Oracle 服务器核实每一个数据块的完整性

– 使用 CASCADE 选项可以确认与表有关的全部索引,并且执行表和索引之间的交叉引用

ANALYZE TABLE scott.employees

VALIDATE STRUCTURE;

ANALYZE TABLE scott.employees

VALIDATE STRUCTURE;

Page 60: Oracle 数据库的对象及其管理

检测行迁移检测行迁移– Oracle 服务器根据样本数据收集统计信息

并更新数据字典

– 检查 CHAIN_CNT

– Oracle 服务器根据样本数据收集统计信息并更新数据字典

– 检查 CHAIN_CNT

ANALYZE TABLE scott.employees

ESTIMATE STATISTICS;

ANALYZE TABLE scott.employees

ESTIMATE STATISTICS;

SELECT chain_cntFROM DBA_TABLESWHERE table_name=‘EMPLOYEES’ AND owner=‘SCOTT’;

SELECT chain_cntFROM DBA_TABLESWHERE table_name=‘EMPLOYEES’ AND owner=‘SCOTT’;

Page 61: Oracle 数据库的对象及其管理

检索表信息检索表信息DBA_OBJECTS

OWNEROBJECT_NAMEOBJECT_IDDATA_OBJECT_IDCREATED

DBA_SEGMENTS

OWNERSEGMENT_NAMETABLESPACE_NAMEHEADER_FILEHEADER_BLOCK

DBA_TABLES

OWNERTABLE_NAMEPCT_FREEPCT_USEDINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_EXTENTSPCT_INCREASECACHEBLOCKSEMPTY_BLOCKSCHAIN_CNT

Page 62: Oracle 数据库的对象及其管理

DBA_EXTENTS

• OWNER

• SEGMENT_NAME

• EXTENT_ID

• FILE_ID

• BLOCK_ID

• BLOCKS

DBA_EXTENTS

• OWNER

• SEGMENT_NAME

• EXTENT_ID

• FILE_ID

• BLOCK_ID

• BLOCKS

检索范围信息检索范围信息

Page 63: Oracle 数据库的对象及其管理

DBMS_ROWID 包DBMS_ROWID 包

函数名称

ROWID_CREATE

ROWID_OBJECT

ROWID_RELATIVE_FNO

ROWID_BLOCK_NUMBER

ROWID_ROW_NUMBER

ROWID_TO_ABSOLUTE_FNO

ROWID_TO_EXTENDED

ROWID_TO_RESTRICTED

说明

根据各个独立部分 建立一个 ROWID

为一个 ROWID 返回对象标识符

为一个 ROWID 返回相对文件号

为一个 ROWID 返回块号

为一个 ROWID 返回行号

为一个 ROWID 返回绝对文件号

将一个 ROWID 从受限的转换成扩展的

将一个 ROWID 从扩展的转换成受限的

通常使用的函数 :通常使用的函数 :

Page 64: Oracle 数据库的对象及其管理

• 管理表空间和数据文件• 存储结构和关系• 管理表• 管理索引• 维护数据完整性

Oracle 数据库的对象及其管理Oracle 数据库的对象及其管理

Page 65: Oracle 数据库的对象及其管理

主要内容主要内容

– 列出各种不同类型的索引及其用途– 建立 B-树和位图索引– 索引重组– 删除索引– 从数据字典获得有关索引信息

– 列出各种不同类型的索引及其用途– 建立 B-树和位图索引– 索引重组– 删除索引– 从数据字典获得有关索引信息

Page 66: Oracle 数据库的对象及其管理

索引分类索引分类逻辑的– 单列的或组合列的– 唯一的或非唯一的物理的– 分区的或非分区的 – B-树或位图

• 正常或倒序键 ( 仅 B-树 )

逻辑的– 单列的或组合列的– 唯一的或非唯一的物理的– 分区的或非分区的 – B-树或位图

• 正常或倒序键 ( 仅 B-树 )

Page 67: Oracle 数据库的对象及其管理

B-树索引B-树索引

索引条目头键列长度键列值ROWID

分支

索引条目

Page 68: Oracle 数据库的对象及其管理

KEY ROWID

EMPNO (BLOCK# ROW# FILE#)----- -------------------1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.00018967 0000000F.0005.00019637 0000000F.0001.00019947 0000000F.0000.0001... ...... ...

颠倒键索引颠倒键索引EMPEMP 的索引 的索引 (EMPNO)(EMPNO) EMPEMP

表表

EMPNO ENAME JOB ...----- ----- --------7499 ALLEN SALESMAN7369 SMITH CLERK7521 WARD SALESMAN ...7566 JONES MANAGER7654 MARTIN SALESMAN7698 BLAKE MANAGER7782 CLARK MANAGER... ... ... ...... ... ... ...

Page 69: Oracle 数据库的对象及其管理

位图索引位图索引

<Blue, 10.0.3, 12.8.3, 1000100100010010100>

<Green, 10.0.3, 12.8.3, 0001010000100100000>

<Red, 10.0.3, 12.8.3, 0100000011000001001>

<Yellow, 10.0.3, 12.8.3, 0010001000001000010>

键键开始开始ROWIDROWID

结束结束ROWIDROWID 位图位图

索引

块 10

块 11

块 12

文件 3

Page 70: Oracle 数据库的对象及其管理

B-树与位图索引的比较B-树与位图索引的比较

B- 树

适合于高基数的列

键值的更新相对昂贵

对使用或谓词的查询语句无效

适用于 OLTP

位图

适合于低基数的列

键值的更新非常昂贵

对使用或谓词的查询语句有效

适用于 DSS

Page 71: Oracle 数据库的对象及其管理

建立正常 B-树索引建立正常 B-树索引

CREATE INDEX scott.emp_lname_idx

ON scott.employees(last_name)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

CREATE INDEX scott.emp_lname_idx

ON scott.employees(last_name)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

Page 72: Oracle 数据库的对象及其管理

创建索引 : 指导原则创建索引 : 指导原则

– 权衡查询和 DML 的需要– 放置在单独的表空间中– 使用相同的范围大小 : 5 个块的倍数或表

空间 MINIMUM EXTENT 的大小– 大的索引可以考虑使用 NOLOGGING 选

项– 如果新键值都接近当前范围则 PCTFREE

设置要高

– 权衡查询和 DML 的需要– 放置在单独的表空间中– 使用相同的范围大小 : 5 个块的倍数或表

空间 MINIMUM EXTENT 的大小– 大的索引可以考虑使用 NOLOGGING 选

项– 如果新键值都接近当前范围则 PCTFREE

设置要高

Page 73: Oracle 数据库的对象及其管理

建立倒序键索引建立倒序键索引

CREATE UNIQUE INDEX scott.ord_ord_no_idx

ON scott.ord(ord_no) REVERSE

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

CREATE UNIQUE INDEX scott.ord_ord_no_idx

ON scott.ord(ord_no) REVERSE

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

Page 74: Oracle 数据库的对象及其管理

建立位图索引建立位图索引

CREATE BITMAP INDEX scott.ord_region_id_idx

ON scott.ord(region_id)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

CREATE BITMAP INDEX scott.ord_region_id_idx

ON scott.ord(region_id)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx01;

Page 75: Oracle 数据库的对象及其管理

改变索引的存储参数改变索引的存储参数

ALTER INDEX scott.emp_lname_idx

STORAGE(NEXT 400K

MAXEXTENTS 100);

ALTER INDEX scott.emp_lname_idx

STORAGE(NEXT 400K

MAXEXTENTS 100);

Page 76: Oracle 数据库的对象及其管理

索引空间的分配与去配索引空间的分配与去配

ALTER INDEX scott.ord_region_id_idx

ALLOCATE EXTENT (SIZE 200K

DATAFILE ‘DISK6/indx01.dbf’);

ALTER INDEX scott.ord_region_id_idx

ALLOCATE EXTENT (SIZE 200K

DATAFILE ‘DISK6/indx01.dbf’);

ALTER INDEX scott.ord_ord_no_idx

DEALLOCATE UNUSED;

ALTER INDEX scott.ord_ord_no_idx

DEALLOCATE UNUSED;

Page 77: Oracle 数据库的对象及其管理

重建索引 重建索引

ALTER INDEX scott.ord_region_id_idx

REBUILD

TABLESPACE indx02;

ALTER INDEX scott.ord_region_id_idx

REBUILD

TABLESPACE indx02;

使用该命令可以 :– 将一个索引移到另一个不同的表空间– 通过去除已经删除的条目改善空间的利用– 颠倒键索引与正常 B-树索引之间的变换

使用该命令可以 :– 将一个索引移到另一个不同的表空间– 通过去除已经删除的条目改善空间的利用– 颠倒键索引与正常 B-树索引之间的变换

Page 78: Oracle 数据库的对象及其管理

检查索引的有效性检查索引的有效性

ANALYZE INDEX scott.ord_region_id_idx V

ALIDATE STRUCTURE;

ANALYZE INDEX scott.ord_region_id_idx V

ALIDATE STRUCTURE;

INDEX_STATS

Page 79: Oracle 数据库的对象及其管理

删除索引删除索引

• 在大批数据装入之前先删除索引,然后再重建• 删除不经常使用的索引,并在需要时再建立• 删除并重建无效的索引

• 在大批数据装入之前先删除索引,然后再重建• 删除不经常使用的索引,并在需要时再建立• 删除并重建无效的索引

DROP INDEX scott.dept_dname_idx;DROP INDEX scott.dept_dname_idx;

Page 80: Oracle 数据库的对象及其管理

获得有关索引信息获得有关索引信息DBA_INDEXESOWNER

INDEX_NAME

INDEX_TYPE

TABLE_OWNER

TABLE_NAME

UNIQUENESS

TABLESPACE_NAME

LOGGING

STATUS

DBA_INDEXESOWNER

INDEX_NAME

INDEX_TYPE

TABLE_OWNER

TABLE_NAME

UNIQUENESS

TABLESPACE_NAME

LOGGING

STATUS

DBA_IND_COLUMNSINDEX_OWNER

INDEX_NAME

TABLE_OWNER

TABLE_NAME

COLUMN_NAME

COLUMN_POSITION

COLUMN_LENGTH

DBA_IND_COLUMNSINDEX_OWNER

INDEX_NAME

TABLE_OWNER

TABLE_NAME

COLUMN_NAME

COLUMN_POSITION

COLUMN_LENGTH

Page 81: Oracle 数据库的对象及其管理

• 管理表空间和数据文件• 存储结构和关系• 管理表• 管理索引• 维护数据完整性

Oracle 数据库的对象及其管理Oracle 数据库的对象及其管理

Page 82: Oracle 数据库的对象及其管理

主要内容主要内容

– 实现数据完整性约束和触发器– 维护完整性约束和触发器– 从数据字典获得约束和触发器的有关信息

– 实现数据完整性约束和触发器– 维护完整性约束和触发器– 从数据字典获得约束和触发器的有关信息

Page 83: Oracle 数据库的对象及其管理

数据完整性数据完整性

应用程序应用程序

完整性约束完整性约束数据库触发器数据库触发器

数据数据

Page 84: Oracle 数据库的对象及其管理

约束的类型约束的类型说明指定一个列不能包含空值标明一个列或列的组合是唯一的标明一个列或列的组合是表的主键标明一个列或列的组合是引用完整性中的外部键指定表的每一行必须满足的条件

约束NOT NULLUNIQUE

PRIMARY KEY

FOREIGN KEY

CHECK

Page 85: Oracle 数据库的对象及其管理

延期的约束延期的约束

• DML语句• DML语句检查非延期的约束检查非延期的约束

COMMITCOMMIT

检查延期的约束检查延期的约束

Page 86: Oracle 数据库的对象及其管理

主 / 唯一键强制主 / 唯一键强制

不使用索引不使用索引 建立唯一索引建立唯一索引

使用存在使用存在的索引的索引

是否有可是否有可用的索引用的索引 ??

是是

否否 否否

是是

约束可延期否约束可延期否 ??

建立非唯一索引建立非唯一索引

是是

否否

启用键否启用键否 ??

Page 87: Oracle 数据库的对象及其管理

外部键考虑外部键考虑至Drop parent table

Truncate parent table

Drop tablespace containing parent table

Avoid locks on child table while performing DML on parent table

Perform DML on child table

执行Cascade constraints

Disable/drop foreign key

Use CASCADE CONSTRAINTS clause

Create index on foreign key

Ensure tablespace containing parent key index online

Page 88: Oracle 数据库的对象及其管理

数据库触发器数据库触发器

触发器

DML操作

触发器类型• INSERT 或 UPDATE 或 DELETE

• BEFORE 或 AFTER

• ROW 或 STATEMENT

触发器类型• INSERT 或 UPDATE 或 DELETE

• BEFORE 或 AFTER

• ROW 或 STATEMENT

Page 89: Oracle 数据库的对象及其管理

创建表时定义约束 创建表时定义约束

CREATE TABLE scott.employees(

empno NUMBER(4)

CONSTRAINT emp_pk PRIMARY KEY

DEFERRABLE

USING INDEX

STORAGE(INITIAL 100K NEXT 100K)

TABLESPACE indx01,

last_name VARCHAR2(30)

CONSTRAINT emp_ln_nn NOT NULL,

deptno NUMBER(2))

TABLESPACE data01;

CREATE TABLE scott.employees(

empno NUMBER(4)

CONSTRAINT emp_pk PRIMARY KEY

DEFERRABLE

USING INDEX

STORAGE(INITIAL 100K NEXT 100K)

TABLESPACE indx01,

last_name VARCHAR2(30)

CONSTRAINT emp_ln_nn NOT NULL,

deptno NUMBER(2))

TABLESPACE data01;

Page 90: Oracle 数据库的对象及其管理

定义约束的指导方针定义约束的指导方针

– 主键和唯一性约束 :• 将索引放置在另外的表空间中• 如果批量装入非常频繁 , 使用非唯一索引

– 自引用外部键 :• 初始装入后再定义或启用外部键• 延期约束检查

– 主键和唯一性约束 :• 将索引放置在另外的表空间中• 如果批量装入非常频繁 , 使用非唯一索引

– 自引用外部键 :• 初始装入后再定义或启用外部键• 延期约束检查

Page 91: Oracle 数据库的对象及其管理

禁用约束禁用约束– 在批量装入时禁用,尤其是自引用外部键

的情况– 禁用主键之前,首先禁用引用外部键

– 唯一索引被删除,但保留非唯一索引

– 在批量装入时禁用,尤其是自引用外部键的情况

– 禁用主键之前,首先禁用引用外部键

– 唯一索引被删除,但保留非唯一索引

ALTER TABLE scott.departments

DISABLE CONSTRAINT dept_pk CASCADE;

ALTER TABLE scott.departments

DISABLE CONSTRAINT dept_pk CASCADE;

Page 92: Oracle 数据库的对象及其管理

启用约束启用约束

启用 启用 NOVALIDATENOVALIDATE

• 不锁表• 主 / 唯一键必须使用非唯 一索引

• 不锁表• 主 / 唯一键必须使用非唯 一索引

ALTER TABLE scott.departments

ENABLE NOVALIDATE CONSTRAINT dept_pk;

ALTER TABLE scott.departments

ENABLE NOVALIDATE CONSTRAINT dept_pk;

Page 93: Oracle 数据库的对象及其管理

启用约束启用约束

启用 启用 VALIDATEVALIDATE

• 锁表• 可以使用唯一或非唯一

索引• 需要正确的表数据

• 锁表• 可以使用唯一或非唯一

索引• 需要正确的表数据

ALTER TABLE scott.employees

ENABLE VALIDATE CONSTRAINT emp_dept_fk;

ALTER TABLE scott.employees

ENABLE VALIDATE CONSTRAINT emp_dept_fk;

Page 94: Oracle 数据库的对象及其管理

使用 EXCEPTIONS 表使用 EXCEPTIONS 表

1. 建立 EXCEPTIONS 表 (utlexcpt.sql)

2. 执行带 EXCEPTIONS 子句的 ALTER TABLE

3. 在 EXCEPTIONS上使用子查询定位不正确数据的行

4. 纠正错误5. 再次执行 ALTER TABLE启用约束

1. 建立 EXCEPTIONS 表 (utlexcpt.sql)

2. 执行带 EXCEPTIONS 子句的 ALTER TABLE

3. 在 EXCEPTIONS上使用子查询定位不正确数据的行

4. 纠正错误5. 再次执行 ALTER TABLE启用约束

Page 95: Oracle 数据库的对象及其管理

禁用和启用触发器禁用和启用触发器

– 使用 ALTER TRIGGER禁用或启用一个触发器

– 使用 ALTER TABLE禁用或启用全部触发器

– 使用 ALTER TRIGGER禁用或启用一个触发器

– 使用 ALTER TABLE禁用或启用全部触发器

ALTER TRIGGER scott.emp_conv_ln

DISABLE;

ALTER TRIGGER scott.emp_conv_ln

DISABLE;

ALTER TABLE scott.employees

ENABLE ALL TRIGGERS;

ALTER TABLE scott.employees

ENABLE ALL TRIGGERS;

Page 96: Oracle 数据库的对象及其管理

删除约束删除约束

– 使用此命令删除约束 :

– 使用此命令删除表及其任何引用的外部键 :

– 使用此命令删除约束 :

– 使用此命令删除表及其任何引用的外部键 :

ALTER TABLE scott.employees

DROP CONSTRAINT emp_ln_uk;

ALTER TABLE scott.employees

DROP CONSTRAINT emp_ln_uk;

DROP TABLE departments

CASCADE CONSTRAINTS;

DROP TABLE departments

CASCADE CONSTRAINTS;

Page 97: Oracle 数据库的对象及其管理

删除触发器删除触发器

DROP TRIGGER scott.audit_dept;DROP TRIGGER scott.audit_dept;

Page 98: Oracle 数据库的对象及其管理

获得约束的有关信息获得约束的有关信息DBA_CONSTRAINTSOWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAMEDELETE_RULE STATUS DEFERRABLE DEFERRED VALIDATED GENERATED BAD LAST_CHANGE

DBA_CONS_COLUMNSOWNER CONSTRAINT_NAMETABLE_NAME COLUMN_NAME POSITION

Page 99: Oracle 数据库的对象及其管理

获得触发器的有关信息获得触发器的有关信息DBA_TRIGGERS OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT TABLE_OWNER TABLE_NAME STATUS DESCRIPTION TRIGGER_BODY

DBA_TRIGGER_COLSTRIGGER_OWNERTRIGGER_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME

DBA_OBJECTSOWNEROBJECT_NAME OBJECT_TYPE STATUS