2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------- ---------------- ------------------------------------- DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace
例6-27的查询语句显示结果表明:表空间TEMP为当前的默认临时表空间。随着潘金莲项目的不断进展,有关该项目的数据处理也变得越来越频繁,为了提高该项目的数据处理的速度,您决定将jinlian_temp临时表空间设为默认临时表空间。于是您发出了如例6-28命令。
例6-28
SQL> ALTER DATABASE
2 DEFAULT TEMPORARY TABLESPACE jinlian_temp; 数据库已更改。
接下来您可以使用如例6-29的SQL查询语句来验证现在的默认临时表空间是否为jinlian_temp。
例6-29 SQL> SELECT *
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------- ---------------- ------------------------------------- DEFAULT_TEMP_TABLESPACE JINLIAN_TEMP Name of default temporary tablespace
当不再处理金莲项目数据时,请别忘了将默认临时表空间再改回为TEMP表空间。此时您应该使用如例6-30的命令。
例6-30
SQL> ALTER DATABASE
2 DEFAULT TEMPORARY TABLESPACE temp; 数据库已更改。
最后您还是应该使用如例6-31的SQL查询语句来验证一下现在的默认临时表空间是否为temp。
例6-31 SQL> SELECT *
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------- ---------------- ------------------------------------- DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace
在结束这一节之前,最后介绍一下在默认临时表空间上的一些限制。首先默认临时表空间不能被删除,除非有一个新的可以使用的默认临时表空间。也就是必须先使用ALTER DATABASE将一新的临时表空间设置为默认临时表空间,之后才能删除旧的(默认)临时表空间。使用旧的(默认)临时表空间的用户被自动地赋予新的默认临时表空间。
因为默认临时表空间必须是临时(TEMPORARY)表空间或者是系统(SYSTEM)表空间,所以不能将默认临时表空间改为一个永久表空间。也不能将默认临时表空间设置为脱机。(在接下来的几节中我们将介绍这些操作。)
6.10 设置表空间为脱机
一个表空间的正常状态是联机(Online)状态,此时数据库用户可以访问该表空间中的数据。然而,有时数据库管理员需要将某一表空间设置为脱机状态,以进行数据库的维护。其维护工作包括:
? 在数据库处在打开状态下移动数据文件
? 在数据库处在打开状态下恢复一个表空间或一个数据文件 ? 执行对表空间的脱机备份(虽然对表空间可以进行联机备份) ? 使数据库的一部分不可以被访问,而其它的部分可以被正常地访问 当一个表空间被设置为脱机状态时,该表空间上的数据是不可以访问。如果用户试图访问该表空间上的数据就会收到出错信息。
当一个表空间被设置为脱机状态时或重新被设置为联机状态时,Oracle会把这一事件记录在数据字典和控制文件中,也会记录在报警文件中。如果当数据库被关闭时,某一表空间为脱机状态,那么当数据库被加载(MOUNT)和重新打开时该表空间仍保持为脱机状态。
并不是所有的表空间都可以被设置为脱机状态,以下的表空间不能被设置为脱机状态: ? 系统(SYSTEM)表空间
? 上面有活动的还原/回滚段的表空间 ? 默认临时表空间
假设JINLIAN数据表空间出了些问题,需要对它进行维护。于是要将它的状态设为脱机。但为了慎重起见您先使用了如例6-32和例6-34的SQL查询语句以获取该表空间和它对应的数据文件现在的状态。
例6-32
SQL> select tablespace_name, status, contents 2 from dba_tablespaces
3 where tablespace_name LIKE 'JIN%'; TABLESPACE_NAME STATUS CONTENTS --------------- --------- --------- JINLIAN ONLINE PERMANENT JINLIAN_INDEX ONLINE PERMANENT JINLIAN_TEMP ONLINE TEMPORARY JINLIAN_UNDO ONLINE UNDO 例6-33
SQL> col name for a55 例6-34
SQL> SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# >= 8;
FILE# NAME STATUS ---------- ------------------------------------------------------- ------- 8 D:\\ORACLE\\ORADATA\\ORACLE9I\\USERS01.DBF ONLINE 9 J:\\DISK2\\MOON\\JINLIAN01.DBF ONLINE 10 J:\\DISK4\\MOON\\JINLIAN02.DBF ONLINE 11 J:\\DISK6\\MOON\\JINLIAN_INDEX.DBF ONLINE 12 J:\\DISK7\\MOON\\JINLIAN_UNDO.DBF ONLINE
从例6-32和例6-34的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\\DISK2\\MOON\\JINLIAN01.DBF和J:\\DISK4\\MOON\\JINLIAN02.DBF都处在联机状态。此时您就可以使用如例6-25的命令将表空间JINLIAN置为脱机状态。
例6-25
SQL> ALTER TABLESPACE jinlian OFFLINE; 表空间已更改。
接下来您应该验证一下以上命令是否成功。可以使用了如例6-36和例6-37的查询语句以获取该表空间和它对的数据文件现在的状态。
例6-36
SQL> select tablespace_name, status, contents 2 from dba_tablespaces
3 where tablespace_name LIKE 'JIN%'; TABLESPACE_NAME STATUS CONTENTS --------------- --------- --------- JINLIAN OFFLINE PERMANENT JINLIAN_INDEX ONLINE PERMANENT JINLIAN_TEMP ONLINE TEMPORARY JINLIAN_UNDO ONLINE UNDO 例6-37
SQL> SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# >= 8;
FILE# NAME STATUS ---------- ------------------------------------------------------- ------- 8 D:\\ORACLE\\ORADATA\\ORACLE9I\\USERS01.DBF ONLINE 9 J:\\DISK2\\MOON\\JINLIAN01.DBF OFFLINE 10 J:\\DISK4\\MOON\\JINLIAN02.DBF OFFLINE 11 J:\\DISK6\\MOON\\JINLIAN_INDEX.DBF ONLINE 12 J:\\DISK7\\MOON\\JINLIAN_UNDO.DBF ONLINE
从例6-36和例6-37的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\\DISK2\\MOON\\JINLIAN01.DBF和J:\\DISK4\\MOON\\JINLIAN02.DBF都已经处在脱机状态。这说明例6-25的命令已经成功地执行。
当维护工作结束后,您就应该尽快地使用如例6-38的命令将表空间JINLIAN置回为联机状态。
例6-38
SQL> ALTER TABLESPACE jinlian ONLINE; 表空间已更改。
接下来您应该验证一下以上命令是否成功。您可以使用如例6-39和例6-40的查询语句以获取该表空间和它对的数据文件现在的状态。
例6-39
SQL> select tablespace_name, status, contents 2 from dba_tablespaces
3 where tablespace_name LIKE 'JIN%'; TABLESPACE_NAME STATUS CONTENTS
--------------- --------- --------- JINLIAN ONLINE PERMANENT JINLIAN_INDEX ONLINE PERMANENT JINLIAN_TEMP ONLINE TEMPORARY JINLIAN_UNDO ONLINE UNDO 例6-40
SQL> SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# >= 8;
FILE# NAME STATUS ---------- ------------------------------------------------------- ------- 8 D:\\ORACLE\\ORADATA\\ORACLE9I\\USERS01.DBF ONLINE 9 J:\\DISK2\\MOON\\JINLIAN01.DBF ONLINE 10 J:\\DISK4\\MOON\\JINLIAN02.DBF ONLINE 11 J:\\DISK6\\MOON\\JINLIAN_INDEX.DBF ONLINE 12 J:\\DISK7\\MOON\\JINLIAN_UNDO.DBF ONLINE
从例6-39和例6-40的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\\DISK2\\MOON\\JINLIAN01.DBF和J:\\DISK4\\MOON\\JINLIAN02.DBF都已经处在联机状态。这说明例6-38的命令已经成功地执行。现在您就可以通知使用JINLIAN表空间上数据的用户可以正常地操作该表空间上的数据了。
6.11 只读(Read-Only)表空间
当一个表空间处在只读状态时,在该表空间中的数据只能进行读操作,也就是说在上面的数据是不会变化的,因此也就不需要重做日志的保护,所以操作只读状态表空间上的数据时不会产生重做操作。这也就提高了系统的效率。由于只读表空间上的数据是不变的,所以对该表空间只要做一次备份就够了。这不但减少了数据库系统的维护工作量还使系统的负荷减轻。因此如果将一个数据库精心设计把许多不变的数据归类放在一个或几个表空间中,然后将它们的状态改为只读,将会使该数据库的维护更加容易而且效率更高。
当使用命令将一个表空间的状态改为只读时,一开始该表空间处于一种中间的状态。在这种状态下,除了那些没有完成的事务之外在该表空间中不能进行任何的写操作,一旦那些没有完成的事务结束(即可以是提交也可以是回滚),该表空间就被置为只读状态。
将一个表空间的状态改为只读时Oracle会产生检查点。可以删除只读表空间中的对象,如表和索引,这是因为删除对象的命令是DDL语句,它们只修改数据字典而不是数据文件。
将一个表空间的状态改为只读时或反过来将一个表空间的状态改为可读可写(正常)时,该表空间必须处在联机状态。
随着潘金莲项目不断进展,有关该项目的数据处理也变得越来越频繁,系统的效率已经成为了一个大问题。经过仔细分析,您发现潘金莲项目的数据是以批处理的方式定期输入的,一旦输入后上面的数据是不能修改的。于是为了提高该项目的数据处理的速度,您决定在每次输入数据之后将jinlian表空间的状态改为只读。于是您发出了如例6-41命令。
例6-41
SQL> ALTER TABLESPACE jinlian READ ONLY; 表空间已更改。
接下来您应该验证一下以上命令是否成功。可以使用如例6-42的查询语句以获取表空
间的状态信息。
例6-42
SQL> select tablespace_name, status, contents 2 from dba_tablespaces
3 where tablespace_name LIKE 'JIN%';
TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- JINLIAN READ ONLY PERMANENT JINLIAN_INDEX ONLINE PERMANENT JINLIAN_TEMP ONLINE TEMPORARY JINLIAN_UNDO ONLINE UNDO
从例6-42的查询结果显示可以看出表空间JINLIAN已经处在只读状态(READ ONLY)。这说明例6-41的命令已经成功地执行。
当需要重新向JINLIAN表空间中输入数据时,您就可以使用如例6-43的命令将表空间的状态又改回为可读可写(正常)。
例6-43
SQL> ALTER TABLESPACE jinlian READ WRITE; 表空间已更改。
接下来您也应该验证一下以上命令是否成功地将表空间JINLIAN改回为可读可写(正常)状态。您可以使用如例6-44的查询语句以获取表空间的状态信息。
例6-44
SQL> select tablespace_name, status, contents 2 from dba_tablespaces
3 where tablespace_name LIKE 'JIN%';
TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- JINLIAN ONLINE PERMANENT JINLIAN_INDEX ONLINE PERMANENT JINLIAN_TEMP ONLINE TEMPORARY JINLIAN_UNDO ONLINE UNDO
从例6-44的查询结果显示可以看出:表空间JINLIAN已经处在正常状态(ONLINE)。这说明例6-43的命令已经成功地执行。
最后您还可以利用操作系统工具,如NT的记事本来查看一下报警文件中的内容。如例6-45。
例6-45
从例6-45报警文件的显示可以看出:表空间JINLIAN所有状态的变化以及相应的时间都已经被详细地记录在报警文件中。Oracle够聪明的吧?
6.12 改变表空间的存储设置
如果在创建表空间时所设置的存储参数不合适,可以使用如下的命令进行修改; ALTER TABLESPACE 表空间名 [MINIMUM EXTENT 正整数[K|M] |DEFAULT 存储子句 ]随着潘金莲项目的不断进展,有关该项目的数据量变得越