数据库逻辑结构
1. 表空间tablespace
1. 理论
表空间分类 | 名称 | 描述 |
---|
EXAMPLE | 示例表空间 | 示例表空间,存放示例数据库的方案对象信息及其培训资料 |
SYSAUX | 辅助系统表空间 | 辅助系统表空间,用于减少system表空间的负荷,提高系统的工作效率。是oracle 10g新增加的表空间 |
SYSTEM | 系统表空间 | 系统表空间,存放关于表空间名称、控制文件、数据文件等管理信息,存放着方案对象(如表,索引,同义词,序列)的定义信息,存放着所有pl/sql 程序(如过程,函数,包,触发器)的源代码,是oracle数据库中最重要的表空间。它属于SYS和SYSTEM方案,仅被SYS和SYSTEM或其他具有足够权限的用户使用。即使是SYS 和SYSTEM用户也不能删除或重命名该空间。他是用户的默认表空间,即当用户在创建一个对象时,如果没有指定特定的表空间,该对象的数据也会被保存在SYSTEM表空间中。 |
TEMP | 临时表空间 | 存储数据库的中间执行过程,如:保存order by数据库排序,分组时产生的临时数据。操作完成后存储的内容会被自动释放。临时表空间是通用的,所的用户都使用TEMP作为临时表空间。一般只有tmp一个临时表空间,如果还需要别的临时表空间时,可以自己创建。 |
UNDO | UNDO表空间 | 保存数据修改前的副本。存储事务所修改的旧址,即被修改之前的数据。当我们对一张表中的数据进行修改的同时会对修改之前的信息进行保存,为了对数据执行回滚、恢复、撤销的操作。 |
SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username='SYSTEM';
用户在登陆后创建数据库对象时,如果没有指定表空间,那么这些数据就会存储到默认表空间。
注意:如果创建用户时,不指定其永久表空间,则会使用默认的表空间。
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES;
针对某个用户的:
SQL> alter user user_name default tablespace tbs_name;
设置数据库的默认临时表空间:
SQL> alter database default tablespace temp_tbs_name;
系统管理员:
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
SQL> SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS
针对系统
SQL> alter database default temporary tablespace temp_grp;
针对用户
SQL> Alter user test temporary tablespace temp1;
SQL> show parameter undo;
2. 表空间/临时表空间操作
SQL> alter system set DB_CREATE_FILE_DEST='/oracle/oradata' scope=both;
create tablespace mytablespace datafile '/home/oracle/oradata/mytablespace.dbf' size 200m autoextend on next 512k maxsize unlimited
logging
online
extent management local autoallocate
blocksize 8k
segment space management manual
flashback on;
CREATE TABLESPACE test_db DATAFILE '/oracle/oradata/orcl/test_db1.dbf' SIZE 10m AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, '/oracle/oradata/orcl/test_db2.dbf' size 10M autoextend on next 100M maxsize 100m;
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 100m autoextend ON NEXT 10M maxsize unlimited extent management local uniform size 2m segment space management manual;
段空间的手工管理(Manual Segment Space Management)
SQL> show parameter block
SQL> show parameter db_16k_cache_size
SQL> alter system set db_16k_cache_size=100m;
SQL> create tablespace ts16k datafile '/oracle/data/ts16k.dbf' size 5m blocksize 16k;
CREATE bigfile TABLESPACE test_db DATAFILE '/oracle/oradata/orcl/test_db1.dbf' SIZE 10m AUTOEXTEND ON NEXT 10M MAXSIZE 4T;
SQL> alter database datafile '/oracle/oradata/orcl/test_db1.dbf' resize 20M;
SQL> alter database datafile '/oracle/oradata/orcl/tbs1.dbf' autoextend on;
SQL> alter database datafile '/oracle/oradata/orcl/tbs1.dbf' autoextend on next 20M;
SQL> alter database datafile '/oracle/oradata/orcl/tbs1.dbf' autoextend on next 20M
maxsize 20G;
SQL> select file_name,tablespace_name from dba_data_files;
SQL> alter tablespace test_db add datafile '/oracle/oradata/orcl/test_db-2.dbf' size 10M autoextend on next 20M maxsize 20G;
alter tablespace test_db drop datafile '/oracle/oradata/orcl/test_db2.dbf';
CREATE TEMPORARY TABLESPACE test_temp TEMPFILE '/oracle/oradata/orcl/test_temp.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
create temporary tablespace temp1 tempfile '$ORACLE_BASE/oradata/PROD1/temp02.dbf' size 50m tablespace group temp_grp;
SQL>alter database default temporary tablespace tempgrp;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u04/gsp/oradata/temp02.dbf' SIZE 4G AUTOEXTEND ON NEXT 128M MAXSIZE 6G;
SELECT * FROM v$tablespace;
drop tablespace test_db including contents and datafiles;
SQL> SELECT FILE_NAME,TABLESPACE_NAME from DBA_DATA_FILES;
3. UNDO表空间
命令
(1)创建undo表空间
使用create undo tablespace来创建undo tablespace。undo tablespace用来保存事务的回退信息,用户不能在其中创建数据库对象。
show parameter undo;
create undo tablespace test_undo datafile '/oracle/oradata/orcl/test_undo.dbf' size 2m;
(2)修改undo表空间
可以使用alter tablespace修改undo表空间,允许对undo表空间进行如下操作:
alter tablespace undotbs1 add datafile '/home/app/oracle/oradata/orcl/untbs02.dbf' size 50M;
alter database datafile '/home/app/oracle/oradata/orcl/untbs02.dbf' resize 100M;
(3)删除undo表空间
drop tablespace test_db including contents and datafiles;
(4)切换undo表空间,直接修改即可,无需重启实例
ALTER SYSTEM SET UNDO_TABLESPACE = undotbs_name
(5)参数 UNDO_RETENTION 设置撤销保留时间的大小
前提:
SQL> alter tablespace UNDOTBS1 retention guarantee;
关闭撤销信息的保证保留
SQL> alter tablespace UNDOTBS1 retention noguarantee;
SQL> alter system set UNDO_RETENTION=1800 设置保留时间为30分钟(1800秒)。
UNDO_RETENTION参数默认设置为900秒。
2. 段segment
1. 理论
段类型 | 名称 | 描述 |
---|
表 | table | 段名 = 表名 |
表分区 | table partition | 段名 = 表名 and 分区名不为空 |
表子分区 | table subpartition | 段名 = 表名 and 分区名不为空且不同 |
索引 | index | 段名 = 索引名 |
索引分区 | index partition | 段名 = 索引名 and 分区名不为空 |
索引子分区 | index subpartition | 段名 = 索引名 and 分区名不为空且不同 |
聚簇 | cluster | |
lob 段 | lobsegment | 每个 lob 字段都会对应一个 lob 段,可分区 |
lob 分区 | lob partition | |
lob 子分区 | lob subpartition | |
lob 索引 | lobindex | |
回滚段 | rollback | 8i及以前,名称 system |
撤销段 | type2 undo | 9i及以后 |
嵌套表 | nested table | |
2. 实操
SQL> select * from dba_tablespaces;
SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;
select t.segment_name, t.* from dba_segments t;
select t.segment_name, t.* from user_segments t;
select t.table_name, t.* from dba_tab_comments t;
select t.table_name, t.* from all_tab_comments t;
select t.table_name, t.* from user_tab_comments t;
select * from dba_lobs;
select * from dba_lob_partitions;
select * from dba_lob_subpartitions;
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 100m autoextend ON NEXT 10M MAXSIZE UNLIMITED extent management local uniform size 2m segment space management manual;
3. 区extend
1. 理论
select * from dba_extents;
select * from user_extents;
SQL> select * from dba_tablespaces;
SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 100m autoextend ON NEXT 10M MAXSIZE UNLIMITED extent management local uniform size 2m segment space management manual;
4. 数据块block
1. 理论
1. 数据块 和 操作系统块
(1) 数据块 : '最小的逻辑单元'
(2) 操作系统块: 读取或写入磁盘的最小单元('I/O')
(3) 数据快 和 操作系统快分离的意义:'屏蔽了不同操作系统的差异'
2. 数据块的大小
(1) 数据库创建时设置,之后无法更改,除非重新创建数据库。
(2) 一般默认大小 '8kb'
show parameters db_block_size
3. 行数据格式(Row Data)
(1) 可通过伪列 rowid 查看,共计 18 位
select rowid,
dbms_rowid.rowid_object(rowid) object_id,
dbms_rowid.rowid_relative_fno(rowid) relative_fno,
dbms_rowid.rowid_block_number(rowid) block_number,
dbms_rowid.rowid_row_number(rowid) row_number
from scott.emp;