oracle dba培训教程 第10章 管理表

 

Oracle的常用数据存储结构

表,索引表,簇,分区表

常用的内置标量数据类型

VARCHAR(size)NVARCHAR(size):变长字符型数据

CHAR(size)NCHARsize:定长字符型数据

DATE:日期型数据

NUMBER(p,s):整数型数据,p为十进制数的总长度(位数),s为十进制数小数点后面的位数

!为了处理多媒体对象,oracle提供可如下的LOB数据类型:

         CLOBNCLOB:用来在数据库中存储定长字节的大数据对象

         BLOB:用于在数据库中存储大的无结构的二进制对象

Oracle提供了一个叫DBMS_LOBPL/SQL软件包来维护LOB数据类型的列

BFILE:用于在数据库外的操作系统文件中存储大的无结构的二进制对象。

!为了提高效率,Oracle还提供了

         RAW:在数据库中直接存储的二进制数据

!为了和以前的oracle版本兼容,oracle提供了

         LONGLONG RAW:主要用于在oracle8以前的数据库中存储无结构的数据。

什么是ROWID

当一个用户往oracle数据库的表中插入一行数据时,oracle就会自动地在这一行数据上加上一个ROWID,在一个oralce数据库中每一行都有一个唯一标识的ROWIDoracle系统就是利用它来定位数据行的,ROWID也是oracle数据库提供的一个内置的标量数据类型。

ROWID的特性

!是数据库中每一行的唯一标识符

!并不显式地存储一列的值

!可以被用来定位行,虽然它并未直接的给出一行的物理地址

!提供了访问一个表中一行数据的最快机制

扩展ROWID

一个扩展ROWID在磁盘上需要10字节,它用18个字符来显示,其组成如下:

!数据对象号:被赋予每一个对象,他在一个数据库中是唯一的

!相对文件号:对用一个表空间中的每一个文件是唯一的

!块号:为相对文件中包含数据行的块的位置

!行号:标识了块头中行目录的位置

扩展ROWID的显示是使用64位编码

限制ROWID

它与扩展ROWID的最大区别是他没有数据对象号。

限制性ROWIDoracle7或之前版本使用的,oracle系统在内部存储限制性ROWID时用6个字节,因此它是没有数据对象号的,正因为如此,在oracle7或之前的版本中数据文件的个数不能超过1022个,而在oracle8或之后的版本的数据库中表空间的个数不能超过1022

Oracle数据行的结构

!行头:用来存储该行中列数,链接(迁移)信息和行锁的状态

!行数据:是由一系列列长和列值组成,对于数据行中的每一列,oracle服务器存储列的长度和列的实际值。

列长:一般列长需要一个字节,若列的长度超过了250字节,列长就为3个字节

列值:列的实际值紧接着列长字节后存放。

创建表时应该遵守哪些原则

!将不同的表放在不同的表空间中

!使用本地管理表空间以避免碎片

!在表中使用若干标准extent尺寸以减少表空间碎片

引入临时表的原因

当需要对某一(也可以是几个)表中的一批数据进行反复的操作时,通过为这批数据创建一个临时表可能会简化操作并提高效率。

怎样动态改变存储参数

可以动态的修改PCTFREEPCTUSED这两个参数

Alter table scott.product

PCTFREE 20

PCTUSED 50;

怎样移动非分区表

查看所要移动的表的索引,然后将表移到要求表空间中,然后重建索引

ALTER TABLE SCOTT.EMP

MOVE TABLESPACE USERS

移动非分区表之后的相关索引的维护

ALTER INDEX SCOTT.PK_EMP REBUILD TABLESPACE INDX

怎样重命名表中的一列

ALTER TABLE 用户名.列名

RENAME COLUME 旧名

TO 新列名

限制:如果所要改名的列上有索引,则不能修改,除非删除索引

重新命名表中的一列的副作用及解决办法

列名修改后,基于该表的视图,触发器,函数,过程,软件包等的状态都将无效,需要重新编译

解决方法:可以通过创建视图或在输出结果时使用别名来代替

怎样在一个表中删除一列

ALTER TABLE 用户名.表名

DROP COLUMN 列名

CASCADE CONSTRAINTS CHECKPOINT 行数

在一个表中删除一列时可能对系统造成的冲击

在一个表中删除一列,特别是在一个大表中删除一列是相当耗时的,并且需大量的还原磁盘空间,因此对系统的效率冲击很大,所以应该尽可能的避免在数据库繁忙期间使用删除列语句。

怎样在一个表中把某一列设置成无用

ALTER TABLE 用户名.表名

SET UNUSED 列名 CASCADE CONSTRAINTS

怎样删除已经设置成无用的列

ALTER TABLE 用户名.表名

DROP UNUSED COLUMN CHECKPOINT 行数

把某一列设置成无用时要注意的事项

!该选项只能在oracle8i和以上版本使用

!只能在设置成无用的列标上做记号,并不能真的删除这一列

!设置成无用的列无法用SQL*Plus命令或SQL语句看到

Oracle把设置能无用的列当做删除列处理

!可以把一列也可以把多列设置成无用

!可以使用DROP列名选项来删除被设置成无用的列

!因为该语句是一个DDL语句,所以没有恢复无用列的命令

在一个表中删除一列时使用CHECKPOINT选项

使用该选项来减少还原磁盘空间的使用量,CHECKPOINT 500表明oracle每做了500行的操作就会产生一个检查点,如果在该命令执行期间系统崩溃了,当重启系统后该命令可以从检查点开始继续它的工作,而不必重新开始,可以使用如下命令:

ALTER TABLE 用户名.表名 DROP COLUMNS CONTINUE

表的截断和删除时要注意的问题

这两个语句都是DDL语句,因此是不能回滚的,建议在使用这两个语句之前先做好备份

TRUNCATE TABLE语句的特性

!删除表中所有的数据行,但保留表的结构

!对应的索引也被截断

!因为该语句为DDL语句,所以不会产生还原数据,所删除的数据也无法恢复

!该语句释放表所占的磁盘空间

!并不触发表的删除触发器

!如果一个表正在被一个外键所引用,该表不能截断。

DROP TABLE语句的特性

!删除表中的所有的数据行和表的结构

!删除表中的所有索引

!如果没有备份,所删除的表无法恢复

!该语句释放表所使用extent

!提交所有挂起的事务

!所有基于该表的视图和别名依然保留但已失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值