在管理表空间时应遵循以下原则:
1)使用多重表空间。采用多重表空间可使数据库操作更灵活。主要体现在以下方面:
•将用户数据与数据字典数据相分离,并将不同表空间的数据文件分别存储在不同磁盘上可以降低I/O竞争。
•将一个应用的数据与其他应用相分离,可以避免表空间脱机时多个应用受到影响。
•可根据需要将单个表空间脱机,从而获得较好的可用性。
•通过为不同类型的数据库预留表空间,以达到优化表空间的目的,如更新较高的或只读,或临时段存储等。
•备份单个表空间。
2)为用户指定表空间限额。要创建、管理与使用表空间,必须首先以sys用户并以as sysdba身份登录数据库。与Oracle9i不同,在Oracle 10g中,启动SQL*Plus时的帐户和口令不需加引号。命令格式是:
sqlplus sys/<sys password> as sysdba
在Oracle 10g中,创建和管理表空间所使用的数据字典和权限及语句可归纳如下。
1.与表空间有关的数据字典
查询和使用与表空间有关的元数据均可从下列数据字典中获得。主要包括:
dba_tablespaces、dba_users、dba_ts_quotas、user_tablespaces、
user_ts_quotas、user_extents、user_segments、user_free_space、
dba_data_files、dba_extents、dba_free_space、dba_segments、
dba_temp_files、dba_undo_extents、dba_rollback_segs、
dba_data_files、v_$backup_datafile、
v_$database_block_corruption、v_$datafile、
v_$datafile_copy、v_$datafile_header、v_$rollstat、
v_$segment_statistics、v_$undostat等。
以v_$开头的数据字典均保存为动态信息。
2.与使用表空间有关的系统权限
与表空间有关的主要系统权限有:
create tablespace、alter tablespace、drop tablespace、
manage tablespace和unlimited tablespace等。
其中,unlimited tablespace是允许用户无限制地访问所有表空间。出于安全考虑,在授予该权限给用户时应慎重。如果用户不需要该系统权限,最好撤销该权限,否则用户会利用该权限蓄意创建大量对象或复制数据,从而塞满表空间导致数据库服务器崩溃。
3.创建永久性的表空间
命令格式:
SQL>create[undo]tablespace tablespace
[datafile filespec[autoextend_clause][,filespec[autoextend_clause]]...]
[{minimum extent integer[ k|m]|blocksize integer[k]|{logging|nologging}
|default storage_clause|{online|offline}
|{permanent|temporary}|extent_management_clause|segment_management_clause
}
[ minimum extent integer[k|m]|blocksize integer[k]
|{logging|nologging}|default storage_clause|{online|offline}
|{permanent|temporary}|extent_management_clause|segment_management_clause
]...
];
【例2-1】创建一个名为dalianren的表空间
SQL>create tablespace dalianren nologging
datafile′D:\oracle\product\10.2.0\oradata
\dalianren\dalianren01.ora′size 50m blocksize 8192
extent management local uniform size 256k
segment space management auto;
4.使一个表空间脱机
命令格式:
SQL>alter tablespace<tablespace_name>offline;
【例2-2】将表空间dalianren脱机
SQL>alter tablespace dalianren offline;
注意 system表空间不能脱机。
5.使一个表空间联机
命令格式:
SQL>alter tablespace<tablespace_name>online;
【例2-3】将表空间dalianren联机
SQL>alter tablespace dalianren online;
6.使表空间只读命令格式:
SQL>alter tablespace<tablespace_name>read only;
【例2-4】将表空间dalianren更改为只读
SQL>alter tablespace dalianren read only;
7.使表空间可读可写命令格式:
SQL>alter tablespace<tablespace_name>read write;
【例2-5】将表空间dalianren更改为可读写
SQL>alter tablespace dalianren read write;
8.创建临时表空间命令格式:
SQL>create temporary tablespace<tablespace_name>
tempfile′<data_file_path_and_file_name>′
size<megabytes>m autoextend<on|off>
extent management local uniform size<extent_size>;
【例2-6】创建临时表空间temp
SQL>create temporary tablespace temp
tempfile ′D:\ oracle\product\10.2.0\oradata dalian\temp01.ora′
size 500m autoextend off
extent management local uniform size 512k;
注意虽然语句alter tablespace中带有temporary关键字,但不能使用带有temporary关键字的alter tablespace语句将一个本地管理的永久表空间转变为本地管理的临时表空间。必须使用create temporary tablespace语句直接创建本地管理的临时表空间。
9.添加临时表空间的数据文件
命令格式:
SQL>alter tablespace<tablespace_name>add tempfile ′<path_and_file_name>′size<n>m;
【例2-7】为临时表空间temp_ren添加数据文件
SQL>alter tablespace temp_ren add tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.dbf′size 100m;
10.调整临时表空间的数据文件
命令格式:
SQL>alter database tempfile ′<path_and_file_name>′resize<mega_bytes>m;
【例2-8】调整临时表空间的数据文件大小
SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\test \temp_ren.ora′ resize 20m;
11.将表空间的数据文件或临时文件脱机
命令格式:
SQL>alter database datafile′<path_and_file_name>′ offline;
或
SQL>alter database tempfile ′<path_and_file_name>′ offline;
【例2-9】将表空间的数据文件或临时文件脱机
SQL>alter database datafile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ offline;
或
SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′offline;
12.将临时表空间联机
命令格式:
SQL>Alter database tempfile ′<path_and_file_name>′online;
【例2-10】将临时表空间联机
SQL>Alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ online;
13.删除表空间,但不删除其文件
命令格式:
SQL>drop tablespace<tablespace_name>;
【例2-11】删除表空间dalianren,但不删除其文件
SQL>drop tablespace dalianren;
14.删除包含目录内容的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents;
【例2-12】删除表空间dalianren及其包含的内容
SQL>drop tablespace dalianren including contents;
15.删除包含目录内容和数据文件在内的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents and datafiles;
【例2-13】删除表空间dalianren及其包含的内容以及数据文件
SQL>drop tablespace dalianren including contents and datafiles;
16.当含有参照性约束时,删除包含目录内容和数据文件在内的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents and datafiles cascade constraints;
【例2-14】将表空间dalianren及其包含的内容、数据文件以及相关约束一同删除
SQL>drop tablespace dalianren including contents and datafiles cascade constraints;
17.表空间更名
Oracle9i中不能直接将表空间更名。在Oracle 10g可直接更名永久表空间和临时表空间。但是,system和sysaux表空间不能更名。
命令格式:
SQL>alter tablespace<old_tablespacename>rename to<new_tablespacename>;
【例2-15】将表空间users更改为newusers
SQL>alter tablespace users rename to newusers;
在Oracle 10g中,如果一个撤销表空间通过使用pfile的实例被更名,则警告日志文件中将写入一个信息,提醒用户更改undo_tablespace的参数值。
注意当使用drop tablespace误删除了表空间之后,通过查看alert文件可以确定误操作的时间。该文件位于Oracle_Home\admin \<SID>\bdump目录下,名为alert_<SID>.log,如:D:\oracle\product\10.2.0 \admin\test\bdump目录下的alert_test.log文件。
18.多重临时表空间
在Oracle 10g中增加了一个表空间组的概念,通过使用表空间组用户可以使用一个以上的表空间存储临时段。表空间组是在第一个表空间被指定给该组时,由系统自动隐式创建的。例如:
•通过添加现有的表空间创建表空间组。
SQL>alter tablespace temp tablespace group temp_ts_group;
•添加一个新的表空间给该已经创建的表空间组。
SQL>create temporary tablespace temp2
tempfile ′D:\oracle\product\10.2.0\oradata\test\temp201.dbf ′ size 20m tablespace group temp_ts_group;
被指定给组的表空间可在视图中查询得到。
SQL>select*from dba_tablespace_groups;
group_nametablespace_name
------------------------------------------------------------
temp_ts_grouptemp
temp_ts_grouptemp2
2 rows selected.
SQL>
一旦创建了表空间组,就可以将其指定给用户或作为默认的临时表空间,就像一个表空间一样。
•将表空间组指定给用户,作为临时表空间。
SQL>alter user scott temporary tablespace temp_ts_group;
•将表空间组作为默认的临时表空间。
SQL>alter database default temporary tablespace temp_ts_group;
•表空间也可以从表空间组中移出。
SQL>alter tablespace temp2 tablespace group;
•查询表空间组。
SQL>select*from dba_tablespace_groups;
group_nametablespace_name
------------------------------------------------------------
temp_ts_grouptemp
1 row selected.
SQL>
理论上,一个表空间组包含多少表空间是没有最大限制的,但必须至少包含一个表空间。当最后一个表空间被删除后,该表空间组也被隐式地删除。若该表空间组仍然被指定做临时表空间,则不可以删除该组中的最后一个表空间成员。同时,表空间组不能与表空间同名。
--==========================================================================
--begin 基本表空间介绍
a. 系统表空间
主要存放数据字典和内部系统表基表
查看数据数据字典的SQL
select * from dict
查看内部系统表的SQL
select * from v$fixed_view_definition
DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括
系统的剩余空间
系统的SGA
状态系统的等待
用户的权限
当前的用户锁
缓冲区的使用状况等
在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。
大量的读少量的写是该表空间的一个显著的特点。
b. 临时表空间.
临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。
c. 回滚段表空间
i. 回滚段在系统中的作用
当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
ii. 回滚段的工作方式
一个回滚表空间可以被划分成多个回滚段.
一个回滚段可以保存多个会话的数据.
回滚段是一个圆形的数据模型
假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
我们分析一个Update 语句的完成
①. 用户提交一个Update 语句
②. Server Process 检查内存缓冲.
如果没有该数据块的缓冲,则从磁盘读入
i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘
ii. 如果有有效空间,则读入
③. 在缓冲内更新数据
i. 申请一个回滚段入口,将旧数据写如回滚段
ii. 加锁并更新数据
iii. 并在同时将修改记录在Redo log buffer中
--end 基本表空间介绍
1)使用多重表空间。采用多重表空间可使数据库操作更灵活。主要体现在以下方面:
•将用户数据与数据字典数据相分离,并将不同表空间的数据文件分别存储在不同磁盘上可以降低I/O竞争。
•将一个应用的数据与其他应用相分离,可以避免表空间脱机时多个应用受到影响。
•可根据需要将单个表空间脱机,从而获得较好的可用性。
•通过为不同类型的数据库预留表空间,以达到优化表空间的目的,如更新较高的或只读,或临时段存储等。
•备份单个表空间。
2)为用户指定表空间限额。要创建、管理与使用表空间,必须首先以sys用户并以as sysdba身份登录数据库。与Oracle9i不同,在Oracle 10g中,启动SQL*Plus时的帐户和口令不需加引号。命令格式是:
sqlplus sys/<sys password> as sysdba
在Oracle 10g中,创建和管理表空间所使用的数据字典和权限及语句可归纳如下。
1.与表空间有关的数据字典
查询和使用与表空间有关的元数据均可从下列数据字典中获得。主要包括:
dba_tablespaces、dba_users、dba_ts_quotas、user_tablespaces、
user_ts_quotas、user_extents、user_segments、user_free_space、
dba_data_files、dba_extents、dba_free_space、dba_segments、
dba_temp_files、dba_undo_extents、dba_rollback_segs、
dba_data_files、v_$backup_datafile、
v_$database_block_corruption、v_$datafile、
v_$datafile_copy、v_$datafile_header、v_$rollstat、
v_$segment_statistics、v_$undostat等。
以v_$开头的数据字典均保存为动态信息。
2.与使用表空间有关的系统权限
与表空间有关的主要系统权限有:
create tablespace、alter tablespace、drop tablespace、
manage tablespace和unlimited tablespace等。
其中,unlimited tablespace是允许用户无限制地访问所有表空间。出于安全考虑,在授予该权限给用户时应慎重。如果用户不需要该系统权限,最好撤销该权限,否则用户会利用该权限蓄意创建大量对象或复制数据,从而塞满表空间导致数据库服务器崩溃。
3.创建永久性的表空间
命令格式:
SQL>create[undo]tablespace tablespace
[datafile filespec[autoextend_clause][,filespec[autoextend_clause]]...]
[{minimum extent integer[ k|m]|blocksize integer[k]|{logging|nologging}
|default storage_clause|{online|offline}
|{permanent|temporary}|extent_management_clause|segment_management_clause
}
[ minimum extent integer[k|m]|blocksize integer[k]
|{logging|nologging}|default storage_clause|{online|offline}
|{permanent|temporary}|extent_management_clause|segment_management_clause
]...
];
【例2-1】创建一个名为dalianren的表空间
SQL>create tablespace dalianren nologging
datafile′D:\oracle\product\10.2.0\oradata
\dalianren\dalianren01.ora′size 50m blocksize 8192
extent management local uniform size 256k
segment space management auto;
4.使一个表空间脱机
命令格式:
SQL>alter tablespace<tablespace_name>offline;
【例2-2】将表空间dalianren脱机
SQL>alter tablespace dalianren offline;
注意 system表空间不能脱机。
5.使一个表空间联机
命令格式:
SQL>alter tablespace<tablespace_name>online;
【例2-3】将表空间dalianren联机
SQL>alter tablespace dalianren online;
6.使表空间只读命令格式:
SQL>alter tablespace<tablespace_name>read only;
【例2-4】将表空间dalianren更改为只读
SQL>alter tablespace dalianren read only;
7.使表空间可读可写命令格式:
SQL>alter tablespace<tablespace_name>read write;
【例2-5】将表空间dalianren更改为可读写
SQL>alter tablespace dalianren read write;
8.创建临时表空间命令格式:
SQL>create temporary tablespace<tablespace_name>
tempfile′<data_file_path_and_file_name>′
size<megabytes>m autoextend<on|off>
extent management local uniform size<extent_size>;
【例2-6】创建临时表空间temp
SQL>create temporary tablespace temp
tempfile ′D:\ oracle\product\10.2.0\oradata dalian\temp01.ora′
size 500m autoextend off
extent management local uniform size 512k;
注意虽然语句alter tablespace中带有temporary关键字,但不能使用带有temporary关键字的alter tablespace语句将一个本地管理的永久表空间转变为本地管理的临时表空间。必须使用create temporary tablespace语句直接创建本地管理的临时表空间。
9.添加临时表空间的数据文件
命令格式:
SQL>alter tablespace<tablespace_name>add tempfile ′<path_and_file_name>′size<n>m;
【例2-7】为临时表空间temp_ren添加数据文件
SQL>alter tablespace temp_ren add tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.dbf′size 100m;
10.调整临时表空间的数据文件
命令格式:
SQL>alter database tempfile ′<path_and_file_name>′resize<mega_bytes>m;
【例2-8】调整临时表空间的数据文件大小
SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\test \temp_ren.ora′ resize 20m;
11.将表空间的数据文件或临时文件脱机
命令格式:
SQL>alter database datafile′<path_and_file_name>′ offline;
或
SQL>alter database tempfile ′<path_and_file_name>′ offline;
【例2-9】将表空间的数据文件或临时文件脱机
SQL>alter database datafile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ offline;
或
SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′offline;
12.将临时表空间联机
命令格式:
SQL>Alter database tempfile ′<path_and_file_name>′online;
【例2-10】将临时表空间联机
SQL>Alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ online;
13.删除表空间,但不删除其文件
命令格式:
SQL>drop tablespace<tablespace_name>;
【例2-11】删除表空间dalianren,但不删除其文件
SQL>drop tablespace dalianren;
14.删除包含目录内容的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents;
【例2-12】删除表空间dalianren及其包含的内容
SQL>drop tablespace dalianren including contents;
15.删除包含目录内容和数据文件在内的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents and datafiles;
【例2-13】删除表空间dalianren及其包含的内容以及数据文件
SQL>drop tablespace dalianren including contents and datafiles;
16.当含有参照性约束时,删除包含目录内容和数据文件在内的表空间
命令格式:
SQL>drop tablespace<tablespace_name>including contents and datafiles cascade constraints;
【例2-14】将表空间dalianren及其包含的内容、数据文件以及相关约束一同删除
SQL>drop tablespace dalianren including contents and datafiles cascade constraints;
17.表空间更名
Oracle9i中不能直接将表空间更名。在Oracle 10g可直接更名永久表空间和临时表空间。但是,system和sysaux表空间不能更名。
命令格式:
SQL>alter tablespace<old_tablespacename>rename to<new_tablespacename>;
【例2-15】将表空间users更改为newusers
SQL>alter tablespace users rename to newusers;
在Oracle 10g中,如果一个撤销表空间通过使用pfile的实例被更名,则警告日志文件中将写入一个信息,提醒用户更改undo_tablespace的参数值。
注意当使用drop tablespace误删除了表空间之后,通过查看alert文件可以确定误操作的时间。该文件位于Oracle_Home\admin \<SID>\bdump目录下,名为alert_<SID>.log,如:D:\oracle\product\10.2.0 \admin\test\bdump目录下的alert_test.log文件。
18.多重临时表空间
在Oracle 10g中增加了一个表空间组的概念,通过使用表空间组用户可以使用一个以上的表空间存储临时段。表空间组是在第一个表空间被指定给该组时,由系统自动隐式创建的。例如:
•通过添加现有的表空间创建表空间组。
SQL>alter tablespace temp tablespace group temp_ts_group;
•添加一个新的表空间给该已经创建的表空间组。
SQL>create temporary tablespace temp2
tempfile ′D:\oracle\product\10.2.0\oradata\test\temp201.dbf ′ size 20m tablespace group temp_ts_group;
被指定给组的表空间可在视图中查询得到。
SQL>select*from dba_tablespace_groups;
group_nametablespace_name
------------------------------------------------------------
temp_ts_grouptemp
temp_ts_grouptemp2
2 rows selected.
SQL>
一旦创建了表空间组,就可以将其指定给用户或作为默认的临时表空间,就像一个表空间一样。
•将表空间组指定给用户,作为临时表空间。
SQL>alter user scott temporary tablespace temp_ts_group;
•将表空间组作为默认的临时表空间。
SQL>alter database default temporary tablespace temp_ts_group;
•表空间也可以从表空间组中移出。
SQL>alter tablespace temp2 tablespace group;
•查询表空间组。
SQL>select*from dba_tablespace_groups;
group_nametablespace_name
------------------------------------------------------------
temp_ts_grouptemp
1 row selected.
SQL>
理论上,一个表空间组包含多少表空间是没有最大限制的,但必须至少包含一个表空间。当最后一个表空间被删除后,该表空间组也被隐式地删除。若该表空间组仍然被指定做临时表空间,则不可以删除该组中的最后一个表空间成员。同时,表空间组不能与表空间同名。
--==========================================================================
--begin 基本表空间介绍
a. 系统表空间
主要存放数据字典和内部系统表基表
查看数据数据字典的SQL
select * from dict
查看内部系统表的SQL
select * from v$fixed_view_definition
DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括
系统的剩余空间
系统的SGA
状态系统的等待
用户的权限
当前的用户锁
缓冲区的使用状况等
在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。
大量的读少量的写是该表空间的一个显著的特点。
b. 临时表空间.
临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。
c. 回滚段表空间
i. 回滚段在系统中的作用
当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
ii. 回滚段的工作方式
一个回滚表空间可以被划分成多个回滚段.
一个回滚段可以保存多个会话的数据.
回滚段是一个圆形的数据模型
假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
我们分析一个Update 语句的完成
①. 用户提交一个Update 语句
②. Server Process 检查内存缓冲.
如果没有该数据块的缓冲,则从磁盘读入
i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘
ii. 如果有有效空间,则读入
③. 在缓冲内更新数据
i. 申请一个回滚段入口,将旧数据写如回滚段
ii. 加锁并更新数据
iii. 并在同时将修改记录在Redo log buffer中
--end 基本表空间介绍