6.7 表空间的维护
表空间在创建之后,管理员可能会根据需要修改表空间的状态,或者修改表空间的读写状态,或者修改数据文件的存储位置和名称等。
表空间的状态默认为联机状态,读写权限为可读可写。修改表空间的操作一般由sys用户完成,普通用户如果希望执行这样的操作,需要具有ALTER TABLESPACE系统权限。
6.7.1 表空间的联机与脱机
表空间在创建后默认处于联机状态,数据库管理员可以将它的状态在联机和脱机之间切换。当表空间处于脱机状态时,表空间中的数据文件也都处于脱机状态,这时用户无法访问表空间中的数据。在数据库服务器的运行过程中,有时需要将某个表空间置于脱机状态,如在不影响整个数据库运行的情况下对某个表空间进行备份,或者对某些数据进行保护,不允许用户访问等。
除了SYSTEM表空间、默认的临时表空间、正在使用的UNDO表空间以外,其他表空间都可以置于脱机状态。由于数据库在运行时需要时时刻刻访问SYSTEM表空间,所以它不能被置于脱机状态。将表空间的状态置为脱机的命令格式为:
ALTER TABLESPACE表空间名OFFLINE脱机方式
其中关键字OFFLINE的作用是将表空间脱机。脱机方式有四种选择:NORMAL、TEMPORARY、IMMEDIATE和FOR RECOVER。
其中NORMAL方式是默认的脱机方式,是指将表空间置于正常的脱机状态。在脱机之前,首先要保证数据库高速缓存中的数据与数据文件相一致。数据库服务器促使CKPT进程发出一次检查点,并检查数据文件的状态是否为可用,然后将数据库高速缓存中所有与当前表空间有关的脏缓冲区都写入数据文件,然后关闭表空间中的所有数据文件,并使表空间脱机。由于数据文件与数据库高速缓存中的数据完全一致,在表空间脱机后数据文件也不会发生任何变化,所以当表空间再次联机时不需要恢复数据。
如果希望以NORMAL方式使表空间脱机,脱机方式可以省略。例如,以下语句将使表空间TS3以NORMAL方式脱机:
SQL>ALTER TABLESPACE ts3 OFFLINE;
TEMPORARY方式是指以临时方式将表空间脱机。在脱机前,CKPT进程将发出一次检查点,将数据库高速缓存中的相关脏缓冲区写入数据文件。但CKPT进程不检查数据文件的状态,如果某个数据文件被损坏,部分脏缓冲区中的数据可能无法写入数据文件,所以在表空间下次重新联机时需要进行数据恢复。
例如,以下语句用于将表空间ts3以TEMPORORY方式脱机:
SQL>ALTER TABLESPACE ts3 OFFLINE TEMPORARY;
IMMEDIATE方式是指将表空间立即置于脱机状态。在脱机之前,数据库服务器不发出检查点,而直接将表空间脱机。由于数据库高速缓存中的相关脏缓冲区没有被写入数据文件,所以在表空间下次联机之前需要进行数据恢复。
FOR RECOVER方式是用于恢复表空间的脱机状态。如果已经对表空间进行了备份,并希望用以前的备份对表空间进行恢复,首先需要将表空间以FOR RECOVER方式脱机。例如,以下语句用于将表空间ts3以FOR RECOVER方式脱机:
SQL>ALTER TABLESPACE ts3 OFFLINE FOR RECOVER
数据库服务器在重新启动时,可以将脱机的表空间联机,数据库管理员也可以手工将表空间联机。如果表空间是以NORMAL方式脱机的,那么在再次联机时不需要进行数据恢复。表空间再次联机后,用户又可以访问其中的数据。
用于手工将表空间联机的命令格式为:
ALTER TABLESPACE 表空间 ONLINE