Oracle中的数据库对象包括表、视图、索引、存储程序、序列等,这些数据库对象以一种逻辑关系组织在一起,这就是模式(schema)。模式是一个用户所拥有的数据库对象的集合,模式的名称和用户名相同。
一、表的管理
1、 表的结构
创建一个表时,同时创建一个表段,用于存放表中的数据。表中的数据在物理上都是存放在数据块上的,数据块中存放的是一行行的数据,结构如下:
行的头部记录了列数、行间的全连接、加锁信息等。列长度记录列的实际占用字节,列值记录实际存放的数据。
表中的每行数据都包含一个行号,用来标识改行数据的物理位置,可通过伪列ROWID获得,他是一个18位的字符串,其组成如下:
可以通过DBMS_ROWID程序包中的函数对行号进行分析,用法如下表:
函数 | 描述 |
ROWID_RELATIVE_FNO | 返回一行数据所在数据文件的相对文件号 |
ROWID_OBJECT | 返回一行数据所在数据库对象的编号 |
ROWID_BLOCK_NUMBER | 返回一行数据所在数据块的编号 |
ROWID_ROW_NUMBER | 返回一行数据在数据块中的行号 |
创建表时可以通过CREATE TABLE子句指定一些重要属性。
A. PCTFREE和PCTUSED子句
指定数据块使用的情况,当剩余空间小于PCTFREE指定的值时不能再向数据块中写入数据,当所使用的空间低于PCRUSED指定的值时可以再次向数据块中写入数据。
B. TABLESPACE子句
指定将表创建在哪个表空间上,如果不指定,则创建在用户的默认表空间上。
C. INITRANS和MAXTRANS子句
ORACLE允许多个并发的事务同时修改一个数据块中的数据,该子句用于控制一个数据块上的并发事务数量。INITRANS指定初始的并发数,MAXTRANS指定最大的并发数。
D. CACHE子句
指定该子句后,当用户第一次访问数据表时,该表的所有数据将被读取到数据库高速缓存中,并保留一段时间。对较小的、访问频繁的表可以考虑指定。
E. PARALLEL子句
指定该子句后,在进行批量插入数据时可以并发执行。
F. LOGGING子句
默认为LOGGING,用户在执行DML和DDL时将产生重做日志,如果不希望产生重做日志,用户可以指定NOLOGGING。
G. COMPRESS子句
指定该子句后,一个数据块中两行完全相同的数据将被压缩为一行,并被存储在数据块的开始,数据块中本应该存储这两行数据的地方只存储该行数据的引用。
3、 表的修改
A. 修改表的物理属性
ALTER TABLE tb_name 参数名 值
B.
表的移动
表移动的作用:
>消除表中的存储碎片;
>消除表中数据块间的链接;
>把表移动的另一个表空间
>修改表所使用的数据块大小
例如:
SQL>ALTER TABLE TB1 MOVE TABLESPACE TBS1;
表移动后原表索引将不可用。
C. 存储空间的手工分配和回收
存储空间的分配一般由oracle根据存储参数的设置自动进行。但也可以通过命令手工分配,
SQL>ALTER TABLE TB1 ALLOCATE EXTENT (SIZE 512K);
在表段HWM以下,可能存在一些尚未使用的数据块,可通过命令将这些数据块回收:
SQL>ALTER TABLE TB1 DEALLOCATE UNUSED;
4、 表的删除
删除表将产生以下结果:
>表的结构信息从数据字典中被删除,表中数据不可访问;
>表上的所有索引和触发器被一起删除;
>所有建立在该表上的同义词、视图和存储程序变为无效;
>所有分配给表的区变为空闲,可被分配给其他数据库对象
表被删除时,存储空间并不立即释放,而是重命名后放进回收站,回收站实际是一个数据字典,用于记录被删除的表、索引等数据库对象的信息。用户可以从回收站中恢复误删的数据库对象。
但是当删除一个用户或者删除一个表空间时,用户或表空间中的数据库对象不会放入回收站,并且回收站中原本属于该用户或该表空间的数据也会被删除。
>查看回收站是否开启
SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='recyclebin';
>可以通过设置初始化参数recyclebin启用或禁用回收站功能。
SQL> ALTER SYSTEM SET RECYCLEBIN=OFF|ON;
>查看回收站对象
SQL> SELECT * FROM RECYCLEBIN
>还原回收站
SQL> FLASHBACK TABLE TEST TO BEFORE DROP;