续: [转]Oracle 表空间与数据文件
续 http://nvd11.blog.163.com/blog/static/20001831220127710369356/
五、数据文件
数据文件是数据库中最重要的一个要求,是所有的数据库内容存放的地方
datafile是按照表空间为组织单位,表空间的构成是按照段区块为层次---数据文件的逻辑结构
datafile就是表空间的物理文件。
datafile中的内容是通过dbwr把data buffer cache中的dirty buffer data 写入的
dbwr触发:
ckpt触发,dirty buffer 到一定量的时候,data buffer caceh 的内存空间快用完了
查询空闲内存空间超时,表空间offline/read only,表的drop, truncate 开始执备份表空间的时候 */
--查看数据文件
SQL> select file# ,name,status,enabled,bytes/1024/1024 M from v$datafile;
FILE# NAME STATUS ENABLED M
---------- -------------------------------------------------- ------- ---------- ----------
1 /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM READ WRITE 490
2 /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE READ WRITE 30
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE READ WRITE 250
4 /u01/app/oracle/oradata/orcl/users01.dbf ONLINE READ WRITE 5
5 /u01/app/oracle/oradata/orcl/example01.dbf ONLINE READ WRITE 100
6 /u01/app/oracle/oradata/orcl/tbs1_1.dbf ONLINE READ WRITE 100
7 /u01/app/oracle/oradata/orcl/tbs1_2.dbf ONLINE READ WRITE 60
SQL> select tablespace_name,file_name,user_bytes/1024/1024 M from dba_data_files;
TABLESPACE_NAME FILE_NAME M
------------------------------ ------------------------------------------------------- ----------
USERS01 /u01/app/oracle/oradata/orcl/users01.dbf 4.9375
SYSAUX /u01/app/oracle/oradata/orcl/sysaux01.dbf 249.9375
UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf 29.9375
SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf 489.9375
EXAMPLE /u01/app/oracle/oradata/orcl/example01.dbf 99.9375
TBS1 /u01/app/oracle/oradata/orcl/tbs1_1.dbf 99.9375
TBS1 /u01/app/oracle/oradata/orcl/tbs1_2.dbf 59.9375
--数据文件的增加与删除
--为TBS1增加一个数据文件
SQL> alter tablespace tbs1 add datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf' size 10m autoextend on;
--还有一种创建表空间时不指定大小,而是重用一个存在的dbf要用resue参数,reuse 是把原有的结构拿来用,里面的数据是用不了的,因为早都没有了。
--删表空间中的数据文件,g以后的版本才用以下功能,在之前版本的就只能把表空间给干掉。
SQL> alter tablespace tbs1 drop datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf';
--有数据的数据文件不能删。第一个不能删,如果要删就把表空间干掉,数据文件中有数据写入的文件也不能删除,如下
SQL> alter tablespace tbs1 drop datafile 7; --7是v$datafile中的file#.
alter tablespace tbs1 drop datafile 7
*
ERROR at line 1:
ORA-03262: the file is non-empty
/*
数据文件的日志记录
只有temp表空间是nologing 别的都是logging的
日志记录的几种模式
nologin 并不是不记录日志而是记录的很少
logging 正常记录日志信息
force logging 记录的日志比logging还详细 记录信息非常多 用于DG data guard 容灾的情况 */
SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;
TABLESPACE_NAME LOGGING FOR
------------------------------ --------- ---
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS01 LOGGING NO
EXAMPLE NOLOGGING NO
TBS1 LOGGING NO
--修改表空间中日志文件记录的方式
SQL> alter tablespace tablespace_name nologging | logging | force logging;
SQL> alter tablespace example logging;
Tablespace altered.
SQL> alter tablespace tbs1 force logging;
Tablespace altered.
SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;
TABLESPACE_NAME LOGGING FOR
------------------------------ --------- ---
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS01 LOGGING NO
EXAMPLE LOGGING NO
TBS1 LOGGING YES
/*