Oracle 表空间与数据文件
2015-10-25 16:28
429 查看
一、概念
表空间:是一个或多个数据文件的逻辑集合
表空间逻辑存储对象:永久段-->如表与索引
临时段-->如临时表数据与排序段
回滚段-->用于事物回滚或闪回内存的撤销数据
表空间分类:系统表空间(system、sysaux),非系统表空间
一个表空间至少包含一个数据文件(第一个数据文件是不能删除的),一个数据文件只能属于一个表空间。
不可或缺的几个表空间:
SYSTEM --->字典表空间,不能被损坏
UNDO --->dml,dql把数据快照到此,数据提交即消失(用于恢复)
SYSAUX --->10g 高并发系统繁忙时,会造成system争用,将工具放到SYSAUX,减轻system的压力,SYSAUX不影响系统(影响性能)
TEMP --->临时数据相关的内容
USERS --->10g 用户数据从system拨离出来
二、Oracle的存储结构
1.Schema: 用户--->创建相关对象、表、视图、序列、函数、存储过程、包等
2.逻辑结构:database数据库--->tablespace表空间---> segment段--->extent区间----> block块
逻辑结构是Oracle内部管理数据库中对象的方式
3.物理结构:OS block --->datafile 物理结构通常是一系列数据文件
4.举例描述scott用户创建对象的组织方式
查看scott用户的默认表空间及数据文件
select username,default_tablespace,temporary_tablespace
from dba_users
where username='SCOTT'(一定要大写哦)
SQL> desc dba_users;
Name Type Nullable Default Comments
--------------------------- -------------- -------- ------- ---------------------------------------
USERNAME VARCHAR2(30) Name of the user
USER_ID NUMBER ID number of the user
PASSWORD VARCHAR2(30) Y Encrypted password
ACCOUNT_STATUS VARCHAR2(32)
LOCK_DATE DATE Y
EXPIRY_DATE DATE Y
DEFAULT_TABLESPACE VARCHAR2(30) Default tablespace for data
TEMPORARY_TABLESPACE VARCHAR2(30) Default tablespace for temporary tables
CREATE D DATE User creation date
PROFILE VARCHAR2(30) User resource profile name
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30) Y User's initial consumer group
EXTERNAL_NAME VARCHAR2(4000) Y User external name
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
SCOTT USERS TEMP
col name format a50
select t1.name,t2.name --查看表空间及数据文件
from v$tablespace t1,v$datafile t2
where t1.ts# = t2.ts#(都是这两个视图中的字段)
SQL> desc v$datafile;
Name Type Nullable Default Comments
--------------------- ------------- -------- ------- --------
FILE# NUMBER Y
CREATION_CHANGE# NUMBER Y
CREATION_TIME DATE Y
TS# NUMBER Y
RFILE# NUMBER Y
STATUS VARCHAR2(7) Y
ENABLED VARCHAR2(10) Y
CHECKPOINT_CHANGE# NUMBER Y
CHECKPOINT_TIME DATE Y
UNRECOVERABLE_CHANGE# NUMBER Y
UNRECOVERABLE_TIME DATE Y
LAST_CHANGE# NUMBER Y
LAST_TIME DATE Y
OFFLINE_CHANGE# NUMBER Y
ONLINE_CHANGE# NUMBER Y
ONLINE_TIME DATE Y
BYTES NUMBER Y
BLOCKS NUMBER Y
CREATE_BYTES NUMBER Y
BLOCK_SIZE NUMBER Y
NAME VARCHAR2(513) Y
PLUGGED_IN NUMBER Y
BLOCK1_OFFSET NUMBER Y
AUX_NAME VARCHAR2(513) Y
FIRST_NONLOGGED_SCN NUMBER Y
FIRST_NONLOGGED_TIME DATE Y
SQL> desc v$tablespace;
Name Type Nullable Default Comments
--------------------------- ------------ -------- ------- --------
TS# NUMBER Y
NAME VARCHAR2(30) Y
INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3) Y
BIGFILE VARCHAR2(3) Y
FLASHBACK_ON VARCHAR2(3) Y
ENCRYPT_IN_BACKUP VARCHAR2(3) Y
运行结果:
NAME NAME
----------------------------------------------- --------------------------------------------------
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF
USERS G:\ORADATA\ORACLE\USERS01.DBF
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF
USER_DATA G:\ORACLEMDF\USER_DATA.DBF
scott-->emp(table)-->数据定义(位于)-->system表空间
数据(位于) -->user表空间(逻辑存储)-->表段-->区间-->内存块
-->索引段等-->区间-->内存块
user表空间(物理存储)-->user01.dbf
-->采用本地管理,包含头部信息,可用、已用等位图信息
当databuffer缓冲区满则调用dbwr进程将数据写入到物理文件当中
三、创建表空间
简要语法:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY |
LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]
创建表空间的条件
1.具有create tablespace的权限,DBA角色具有该权限,sysdba,sysoper
2.创建的是bigfile ,还是smallifle 超过T 级别应考虑bigfile
查看缺省是BIGFILE 还是SMALLFILE,当缺省为SMALLFILE,创建表空间不指定表空间类型则为SMALLFILE
select property_name,property_value from database_properties where property_name like '%TBS%'
PROPERTY_NAME PROPERTY_VALUE
------------------------------ -------------------------------
DEFAULT_TBS_TYPE SMALLFILE
修改创建表空间为大或小表空间的默认值
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE
--建议创建表空间时最好带上[BIGFILE | SMALLFILE]参数,以免参数设置导致创建了不合理的表空间
/*
注意:
大表文件(bigfile)最大可以存放个T的容量。头文件的大小达到了G-->block,普通的头文件大小为M---->block。
create bigfile tablespace <> datafile <>........;
好处:减少了数据文件的个数,管理方便,大的对象的存放得到了优化。减少了control文件的信息,控制文件定义了datafile的个数。
bigfile只能存在一个数据文件,所以要保证分配的的磁盘具有足够的空间。 */
创建表空间:
SQL> create tablespace gao datafile 'f:/zhen.dbf' size 100m;
查询表空间和数据文件
select t1.name,t2.name
from v$tablespace t1,v$datafile t2
where t1.ts# = t2.ts#
执行结果:
NAME NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF
USERS G:\ORADATA\ORACLE\USERS01.DBF
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF
USER_DATA G:\ORACLEMDF\USER_DATA.DBF
GAO F:\ZHEN.DBF
创建临时表空间:
创建临时表空间,不能使用非标准数据块,另临时表空间不能存放永久对象。
create temporary tablespace temp_zhen tempfile 'f:/temp_zhen.dbf'
size 100m
临时表空间具有以下特征:
临时数据文件不能置为只读
临时数据文件不能重命名
监时数据文件的日志方式总是NOLOGGING
临时表空间扩容:临时表空间temp_zhen
(1)重置临时文件大小
alter database tempfile 'f:/temp_zhen.dbf' resize 150m
(2)让临时文件能自动扩展
alter database tempfile 'f:temp_zhen.dbf'
autoextend on next 10m maxsize 50m
(3)增加临时文件
alter tablespace temp_zhen add tempfile 'f:/temp_zhen1.dbf' size 50m
(4)查看临时文件
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_temp_files
from dba_data_files
TABLESPACE_NAME FILE_NAME SIZE(MB)
------------------------------ -------------------------------------------------------------------------------- ----------
USERS G:\ORADATA\ORACLE\USERS01.DBF 5
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF 320
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF 35
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF 490
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF 100
USER_DATA G:\ORACLEMDF\USER_DATA.DBF 50
GAO F:\ZHEN.DBF 100
默认临时表空间:
select * from database_properties;
修改默认临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE T2;
默认临时表空间最好要指定一下,如果没有指定默认的临时表空间,那么将使用system表空间作为排 序区
默认临时表空间有一定的限制:
默认临时表空间不能删除
默认临时表空间不能脱机
获得创建表空间的语句:
SELECT dbms_metadata.get_ddl('TABLESPACE','SYSTEM') FROM dual;
临时表空间组:
10G引入的,是一组临时表空间,只能由临时表空间组成。组名不能与临时表空间同名
临时表空间不能显示的创建和删除,当把第一个临时表空间分配给某个临时表空间组的时候,自动创建
临时表空间组,将最后一个临时表空间,删除时,组也将自动删除。
创建临时表空间组:
1、创建临时表空间的时候 */
CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE '...' SIZE n
TABLESPACE GROUP group_name;
create temporary tablespace temp_zhen2 tempfile 'f:/temp_zhen2.dbf'
size 100m
TABLESPACE GROUP group_gao
ALTER TABLESPACE tablespace_name TABLESPACE GROUP group_name;
ALTER TABLESPACE T3 TABLESPACE GROUP TEMP_GRP;
查看临时表空间组的信息:
dba_tablespace_groups
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP_GAO TEMP_ZHEN2
创建UNDO表空间(还原表空间):
创建语法:
CREATE UNDO TABLESPACE tablespace_name DATAFILE '...' SIZE n
SQL> CREATE UNDO TABLESPACE undo2
DATAFILE '/opt/oracle/oradata/orcl/undo2_01.dbf' SIZE 200M,
'/opt/oracle/oradata/orcl/undo2_02.dbf' size 100m;
修改当前系统的UNDO表空间:
ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name
UNDO表空间扩容:
(1)重置DATAFILE大小
(2)让DATAFILE能AUTOEXTEND
(3)添加数据文件
删除UNDO表空间
DROP TABLESPACE tablespace_name
注:当前的UNDO表空间不能删除
系统只能使用一个UNDO表空间
四、表空间的管理方式:
字典管理:
oracle 8i(不包括i),只存在一种表空间的管理模式,即字典管理表空间(DMT)
DMT是指oracle的空间分配或回收是通过数据库中的数据字典表来记录和管理的
用于管理的两个数据字典表分别是:UET$(used extents)和FET$(freeextents)
其工作方式是:当建立一个新的段或者段在表空间时,oracle通过一系列的SQL语句来完成这个工作
且和前面的两个字典表有关,在繁忙的系统中会造成竞争和等待(另一个DMT会带来的问题是空间碎片)
本地管理(LMT):
在i的R2版本后成了默认的选项
LMT在表空间的数据文件头部加入了一个位图区域,在其中记录每个extent的使用状况
当extent被使用或者被释放,oracle会更新头部的记录来反映这个变化,不产生回滚信息
因为仅仅操作数据文件头部的几个数据块,不用操作数据字典,LMT比DMT要快,尤其是在繁忙的时候更明显
查看表空间使用的管理方式:
select tablespace_name,extent_management,block_size,status,contents,force_logging,bigfile
from dba_tablespaces
执行结果:
TABLESPACE_NAME EXTENT_MANAGEMENT BLOCK_SIZE STATUS CONTENTS FORCE_LOGGING BIGFILE
------------------------------ ----------------- ---------- --------- --------- ------------- -------
SYSTEM LOCAL 8192 ONLINE PERMANENT NO NO
UNDOTBS1 LOCAL 8192 ONLINE UNDO NO NO
SYSAUX LOCAL 8192 ONLINE PERMANENT NO NO
TEMP LOCAL 8192 ONLINE TEMPORARY NO NO
USERS LOCAL 8192 ONLINE PERMANENT NO NO
EXAMPLE LOCAL 8192 ONLINE PERMANENT NO NO
USER_TEMP LOCAL 8192 ONLINE TEMPORARY NO NO
USER_DATA LOCAL 8192 ONLINE PERMANENT NO NO
GAO LOCAL 8192 ONLINE PERMANENT NO NO
TEMP_ZHEN LOCAL 8192 ONLINE TEMPORARY NO NO
TEMP_ZHEN2 LOCAL 8192 ONLINE TEMPORARY NO NO
11 rows selected
DMT 和LMT 的相互转换
将字典管理的表空间转换为本地管理
exec dbms_space_admin.tablespace_migrate_to_local('表空间名') --表空间名用大写
将本地管理的表空间转换为字典管理
exec dbms_space_admin.tablespace_migrate_from_local('表空间名')
表空间改名:
必须在open状态下,system , sysaux 不能改名
ALTER TABLESPACE XXX RENAME TO YYY
表空间的扩容:表空间的大小由组成它的所有数据文件的大小之和来决定
扩容的方法
(1)重置数据文件大小
ALTER DATABASE DATAFILE '...' | FileNo RESIZE XX
(2)设置数据文件能自动增长
ALTER DATABASE DATAFILE '... '| FileNo AUTOEXTEND ON | OFF NEXT 20M MAXSIZE 300M;
--查看哪些表空间为自动增长
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
(3)添加数据文件
增加到表空间中的数据文件不能直接从表空间中删除,除非删掉整个表空间
增加数据文件将有助于均衡I/O
文件越多,执行一次检查点的代价越高
ALTER TABLESPACE tablespace_name ADD DATAFILE '...' SIZE XX;
ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size 200m autoextend on ;
表空间的四种状态:
online
offline
read only
read write
offline:
一个表空间的正常状态是联机(ONLINE),有时需要将某一个表空间进行脱机,以进行数据库维护
如:
在数据库打开的状态下移动数据文件
在数据库打开的情况下恢复一个表空间或数据文件
执行表空间的脱机备份(虽然可以进行进行联机备份)
使数据库某一部分不可访问,让其它部分能正常访问。
表空间脱机的时候,将产生检查点事件,该表空间上的数据是不能访问的
ALTER TABLESPACE tablespace_name OFFLINE;
联机命令:
ALTER TABLESPACE tablespace_name ONLINE;
在脱机后,有可能无法再联机,这时要做数据的介质恢复
ALTER DATABASE RECOVER TABLESPACE tablespace_name
ALTER TABLESPACE tablespace_name ONLINE;
read only:不能执行DML语句,可以使用的为DDL,DQL语句
ALTER TABLESPACE tablespace_name READ ONLY;
read write:
ALTER TABLESPACE tablespace_name READ WRITE;
查看表空间:
select tablespace_name,file#,v.status,v.enabled
from dba_data_files d,v$datafile v
where d.file_id=v.file#
临时表空间:
select tablespace_name,file#,v.status,v.enabled
from dba_temp_files d,v$tempfile v
where d.file_id=v.file#
将表空间置为只读
注意,readonly 状态下的表空间可以删除数据,仅仅是不能插入或更新数据
alter tablespace GAO READ ONLY
select tablespace_name,file#,v.status,v.enabled from dba_data_files d,
v$datafile v
where d.file_id = v.file# and tablespace_name = 'GAO'
表空间数据文件的重命名或重定位
方法一,在open状态下且处于archive模式:
1、查出数据文件位置和所属的表空间
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_data_files;
2、将数据文件所在的表空间离线
alter tablespace GAO OFFLINE;
4、修改控制文件,将数据文件的指针重新指向到另一个位置(执行rename)
alter tablespace uu rename datafile '源文件'
to '目标文件';
5、表空间在线
alter tablespace GAO online
方法二,不能脱机的表空间
1、关闭数据库,再启动到mount状态
startup mount
2、在操作系统下,移动或重命名文件
host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf
3、修改控制文件
alter database rename file '/disk8/uu.dbf' to '/disk8/uu2.dbf';
4、打开数据库
alter database open;
删除表空间:
意味着表空间和数据文件的信息从数据库中删除,同时也应该将相应的操作系统文件删除
不能删除的表空间
系统表空间
有活动回滚段的表空间
默认
命令:
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]
INCLUDING CONTENTS -- 删除表空间及所有段
INCLUDING CONTENTS [AND DATAFILES] --删除表空间、所有段、数据文件、同时删除系统中的物理文件临时/永久表空间
限制某个用户对表空间的使用:
ALTER USER user_name QUOTA n ON tablespace_name;
ALTER USER scott QUOTA 10m on GAO;
取消限制
ALTER USER user_name QUOTA UNLIMITED ON tablespace_name;
GRANT UNLIMITED TABLESPACE TO user_name;
单个数据文件离线:
1、查看有哪些数据文件
SELECT name FROM v$datafile;
2、离线
ALTER DATABASE DATAFILE '...' OFFLINE;
3、在线
ALTER DATABASE DATAFILE '... ' ONLINE
有可能提示要进行介质恢复:
RECOVER DATAFILE '...' ;
ALTER DATABASE RECOVER TABLESPACE tablespace_name;
之后再将文件再线
重命名数据文件(同前面移动数据文件一样)
获取表空间和数据文件信息
表空间信息
dba_tablespaces
v$tablespace
数据文件信息
dba_data_files(记录数据库实例中所有数据文件及表空间的信息)
v$datafile
--临时数据文件信息
dba_temp_files(记录临时表空间及临时文件的信息)
v$tempfile
SQL> SELECT PROPERTY_NAME,PROPERTY_VALUE FROM DATABASE_PROPERTIES
2 WHERE PROPERTY_NAME LIKE 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_TBS_TYPE SMALLFILE
修改改系统的默认表空间:
SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name
修改系统的默认临时表空间:
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name
查看用户默认表空间:
select USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users
执行结果:
USERNAME USER_ID DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ---------- ------------------------------ ------------------------------
MGMT_VIEW 53 SYSTEM TEMP
SYS 0 SYSTEM TEMP
SYSTEM 5 SYSTEM TEMP
DBSNMP 24 SYSAUX TEMP
SYSMAN 51 SYSAUX TEMP
SCOTT 54 USERS TEMP
OUTLN 11 SYSTEM TEMP
MDSYS 46 SYSAUX TEMP
ORDSYS 43 SYSAUX TEMP
EXFSYS 34 SYSAUX TEMP
DMSYS 35 SYSAUX TEMP
WMSYS 25 SYSAUX TEMP
CTXSYS 36 SYSAUX TEMP
ANONYMOUS 39 SYSAUX TEMP
XDB 38 SYSAUX TEMP
ORDPLUGINS 44 SYSAUX TEMP
SI_INFORMTN_SCHEMA 45 SYSAUX TEMP
OLAPSYS 47 SYSAUX TEMP
TSMSYS 21 USERS TEMP
BI 60 USERS TEMP
USERNAME USER_ID DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ---------- ------------------------------ ------------------------------
PM 59 USERS TEMP
MDDATA 50 USERS TEMP
IX 57 USERS TEMP
SH 58 USERS TEMP
DIP 19 USERS TEMP
OE 56 USERS TEMP
HR 55 USERS TEMP
修改用户默认表空间:
SQL>ALTER USER user_name DEFAULT TABLESPACE tablespace_name
查看表空间的使用情况:
dba_data_files;
dba_free_space;
例:查每个表空间的剩余空间
SQL> select tablespace_name,sum(bytes/1024/1024)
2 from dba_free_space (记录表空间中空闲空间的信息)
3 group by tablespace_name;
TABLESPACE_NAME SUM(BYTES/1024/1024)
------------------------------ --------------------
UNDOTBS1 21.3125
SYSAUX 8.125
USERS 1.5
SYSTEM 3.6875
EXAMPLE 22.3125
USER_DATA 49.875
五、数据文件
数据文件是数据库中最重要的一个要求,是所有的数据库内容存放的地方
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/1024M
FROM V$DATAFILE;
FILE# NAME STATUS ENABLED M
---------- -------------------------------------------------- ------- ---------- ----------
1 G:\ORADATA\ORACLE\SYSTEM01.DBF SYSTEM READ WRITE 490
2 G:\ORADATA\ORACLE\UNDOTBS01.DBF ONLINE READ WRITE 35
3 G:\ORADATA\ORACLE\SYSAUX01.DBF ONLINE READ WRITE 320
4 G:\ORADATA\ORACLE\USERS01.DBF ONLINE READ WRITE 5
5 G:\ORADATA\ORACLE\EXAMPLE01.DBF ONLINE READ WRITE 100
6 G:\ORACLEMDF\USER_DATA.DBF ONLINE READ WRITE 50
7 F:\ZHEN.DBF OFFLINE DISABLED 0
SQL> select tablespace_name,file_name,user_bytes/1024/1024 M
from dba_data_files;
TABLESPACE_NAME FILE_NAME M
------------------------------ -------------------------------------------------------------------------------- ----------
USERS G:\ORADATA\ORACLE\USERS01.DBF 4.9375
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF 319.9375
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF 34.9375
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF 489.9375
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF 99.9375
USER_DATA G:\ORACLEMDF\USER_DATA.DBF 49.9375
GAO F:\ZHEN.DBF
7 rows selected
数据文件的增加与删除
--为GAO增加一个数据文件(该数据文件可删除)
SQL> alter tablespace GAO add datafile 'F:/ZHEN7.dbf' size 10m autoextend on;
--还有一种创建表空间时不指定大小,而是重用一个存在的dbf要用resue参数,reuse 是把原有的结构拿来用,里面的数据是用不了的,因为早都没有了。
--删表空间中的数据文件,g以后的版本才用以下功能,在之前版本的就只能把表空间给干掉。
SQL> alter tablespace GAO drop datafile 'f:/ZHEN.dbf';
alter tablespace GAO drop datafile 'f:/ZHEN.dbf'
ORA-03263: 无法删除表空间 GAO 的第一个文件
一个表空间对应一个第一个文件
SQL> alter tablespace GAO drop datafile 'f:/ZHEN7.dbf';
Tablespace altered
--有数据的数据文件不能删。第一个不能删,如果要删就把表空间干掉,数据文件中有数据写入的文件也不能删除,如下
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 FORCE_LOGGING
------------------------------ --------- -------------
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS LOGGING NO
EXAMPLE NOLOGGING NO
USER_TEMP NOLOGGING NO
USER_DATA LOGGING NO
GAO LOGGING NO
TEMP_ZHEN NOLOGGING NO
TEMP_ZHEN2 NOLOGGING 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;
表空间:是一个或多个数据文件的逻辑集合
表空间逻辑存储对象:永久段-->如表与索引
临时段-->如临时表数据与排序段
回滚段-->用于事物回滚或闪回内存的撤销数据
表空间分类:系统表空间(system、sysaux),非系统表空间
一个表空间至少包含一个数据文件(第一个数据文件是不能删除的),一个数据文件只能属于一个表空间。
不可或缺的几个表空间:
SYSTEM --->字典表空间,不能被损坏
UNDO --->dml,dql把数据快照到此,数据提交即消失(用于恢复)
SYSAUX --->10g 高并发系统繁忙时,会造成system争用,将工具放到SYSAUX,减轻system的压力,SYSAUX不影响系统(影响性能)
TEMP --->临时数据相关的内容
USERS --->10g 用户数据从system拨离出来
二、Oracle的存储结构
1.Schema: 用户--->创建相关对象、表、视图、序列、函数、存储过程、包等
2.逻辑结构:database数据库--->tablespace表空间---> segment段--->extent区间----> block块
逻辑结构是Oracle内部管理数据库中对象的方式
3.物理结构:OS block --->datafile 物理结构通常是一系列数据文件
4.举例描述scott用户创建对象的组织方式
查看scott用户的默认表空间及数据文件
select username,default_tablespace,temporary_tablespace
from dba_users
where username='SCOTT'(一定要大写哦)
SQL> desc dba_users;
Name Type Nullable Default Comments
--------------------------- -------------- -------- ------- ---------------------------------------
USERNAME VARCHAR2(30) Name of the user
USER_ID NUMBER ID number of the user
PASSWORD VARCHAR2(30) Y Encrypted password
ACCOUNT_STATUS VARCHAR2(32)
LOCK_DATE DATE Y
EXPIRY_DATE DATE Y
DEFAULT_TABLESPACE VARCHAR2(30) Default tablespace for data
TEMPORARY_TABLESPACE VARCHAR2(30) Default tablespace for temporary tables
CREATE D DATE User creation date
PROFILE VARCHAR2(30) User resource profile name
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30) Y User's initial consumer group
EXTERNAL_NAME VARCHAR2(4000) Y User external name
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
SCOTT USERS TEMP
col name format a50
select t1.name,t2.name --查看表空间及数据文件
from v$tablespace t1,v$datafile t2
where t1.ts# = t2.ts#(都是这两个视图中的字段)
SQL> desc v$datafile;
Name Type Nullable Default Comments
--------------------- ------------- -------- ------- --------
FILE# NUMBER Y
CREATION_CHANGE# NUMBER Y
CREATION_TIME DATE Y
TS# NUMBER Y
RFILE# NUMBER Y
STATUS VARCHAR2(7) Y
ENABLED VARCHAR2(10) Y
CHECKPOINT_CHANGE# NUMBER Y
CHECKPOINT_TIME DATE Y
UNRECOVERABLE_CHANGE# NUMBER Y
UNRECOVERABLE_TIME DATE Y
LAST_CHANGE# NUMBER Y
LAST_TIME DATE Y
OFFLINE_CHANGE# NUMBER Y
ONLINE_CHANGE# NUMBER Y
ONLINE_TIME DATE Y
BYTES NUMBER Y
BLOCKS NUMBER Y
CREATE_BYTES NUMBER Y
BLOCK_SIZE NUMBER Y
NAME VARCHAR2(513) Y
PLUGGED_IN NUMBER Y
BLOCK1_OFFSET NUMBER Y
AUX_NAME VARCHAR2(513) Y
FIRST_NONLOGGED_SCN NUMBER Y
FIRST_NONLOGGED_TIME DATE Y
SQL> desc v$tablespace;
Name Type Nullable Default Comments
--------------------------- ------------ -------- ------- --------
TS# NUMBER Y
NAME VARCHAR2(30) Y
INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3) Y
BIGFILE VARCHAR2(3) Y
FLASHBACK_ON VARCHAR2(3) Y
ENCRYPT_IN_BACKUP VARCHAR2(3) Y
运行结果:
NAME NAME
----------------------------------------------- --------------------------------------------------
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF
USERS G:\ORADATA\ORACLE\USERS01.DBF
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF
USER_DATA G:\ORACLEMDF\USER_DATA.DBF
scott-->emp(table)-->数据定义(位于)-->system表空间
数据(位于) -->user表空间(逻辑存储)-->表段-->区间-->内存块
-->索引段等-->区间-->内存块
user表空间(物理存储)-->user01.dbf
-->采用本地管理,包含头部信息,可用、已用等位图信息
当databuffer缓冲区满则调用dbwr进程将数据写入到物理文件当中
三、创建表空间
简要语法:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY |
LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]
创建表空间的条件
1.具有create tablespace的权限,DBA角色具有该权限,sysdba,sysoper
2.创建的是bigfile ,还是smallifle 超过T 级别应考虑bigfile
查看缺省是BIGFILE 还是SMALLFILE,当缺省为SMALLFILE,创建表空间不指定表空间类型则为SMALLFILE
select property_name,property_value from database_properties where property_name like '%TBS%'
PROPERTY_NAME PROPERTY_VALUE
------------------------------ -------------------------------
DEFAULT_TBS_TYPE SMALLFILE
修改创建表空间为大或小表空间的默认值
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE
--建议创建表空间时最好带上[BIGFILE | SMALLFILE]参数,以免参数设置导致创建了不合理的表空间
/*
注意:
大表文件(bigfile)最大可以存放个T的容量。头文件的大小达到了G-->block,普通的头文件大小为M---->block。
create bigfile tablespace <> datafile <>........;
好处:减少了数据文件的个数,管理方便,大的对象的存放得到了优化。减少了control文件的信息,控制文件定义了datafile的个数。
bigfile只能存在一个数据文件,所以要保证分配的的磁盘具有足够的空间。 */
创建表空间:
SQL> create tablespace gao datafile 'f:/zhen.dbf' size 100m;
查询表空间和数据文件
select t1.name,t2.name
from v$tablespace t1,v$datafile t2
where t1.ts# = t2.ts#
执行结果:
NAME NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF
USERS G:\ORADATA\ORACLE\USERS01.DBF
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF
USER_DATA G:\ORACLEMDF\USER_DATA.DBF
GAO F:\ZHEN.DBF
创建临时表空间:
创建临时表空间,不能使用非标准数据块,另临时表空间不能存放永久对象。
create temporary tablespace temp_zhen tempfile 'f:/temp_zhen.dbf'
size 100m
临时表空间具有以下特征:
临时数据文件不能置为只读
临时数据文件不能重命名
监时数据文件的日志方式总是NOLOGGING
临时表空间扩容:临时表空间temp_zhen
(1)重置临时文件大小
alter database tempfile 'f:/temp_zhen.dbf' resize 150m
(2)让临时文件能自动扩展
alter database tempfile 'f:temp_zhen.dbf'
autoextend on next 10m maxsize 50m
(3)增加临时文件
alter tablespace temp_zhen add tempfile 'f:/temp_zhen1.dbf' size 50m
(4)查看临时文件
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_temp_files
from dba_data_files
TABLESPACE_NAME FILE_NAME SIZE(MB)
------------------------------ -------------------------------------------------------------------------------- ----------
USERS G:\ORADATA\ORACLE\USERS01.DBF 5
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF 320
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF 35
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF 490
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF 100
USER_DATA G:\ORACLEMDF\USER_DATA.DBF 50
GAO F:\ZHEN.DBF 100
默认临时表空间:
select * from database_properties;
修改默认临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE T2;
默认临时表空间最好要指定一下,如果没有指定默认的临时表空间,那么将使用system表空间作为排 序区
默认临时表空间有一定的限制:
默认临时表空间不能删除
默认临时表空间不能脱机
获得创建表空间的语句:
SELECT dbms_metadata.get_ddl('TABLESPACE','SYSTEM') FROM dual;
临时表空间组:
10G引入的,是一组临时表空间,只能由临时表空间组成。组名不能与临时表空间同名
临时表空间不能显示的创建和删除,当把第一个临时表空间分配给某个临时表空间组的时候,自动创建
临时表空间组,将最后一个临时表空间,删除时,组也将自动删除。
创建临时表空间组:
1、创建临时表空间的时候 */
CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE '...' SIZE n
TABLESPACE GROUP group_name;
create temporary tablespace temp_zhen2 tempfile 'f:/temp_zhen2.dbf'
size 100m
TABLESPACE GROUP group_gao
ALTER TABLESPACE tablespace_name TABLESPACE GROUP group_name;
ALTER TABLESPACE T3 TABLESPACE GROUP TEMP_GRP;
查看临时表空间组的信息:
dba_tablespace_groups
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP_GAO TEMP_ZHEN2
创建UNDO表空间(还原表空间):
创建语法:
CREATE UNDO TABLESPACE tablespace_name DATAFILE '...' SIZE n
SQL> CREATE UNDO TABLESPACE undo2
DATAFILE '/opt/oracle/oradata/orcl/undo2_01.dbf' SIZE 200M,
'/opt/oracle/oradata/orcl/undo2_02.dbf' size 100m;
修改当前系统的UNDO表空间:
ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name
UNDO表空间扩容:
(1)重置DATAFILE大小
(2)让DATAFILE能AUTOEXTEND
(3)添加数据文件
删除UNDO表空间
DROP TABLESPACE tablespace_name
注:当前的UNDO表空间不能删除
系统只能使用一个UNDO表空间
四、表空间的管理方式:
字典管理:
oracle 8i(不包括i),只存在一种表空间的管理模式,即字典管理表空间(DMT)
DMT是指oracle的空间分配或回收是通过数据库中的数据字典表来记录和管理的
用于管理的两个数据字典表分别是:UET$(used extents)和FET$(freeextents)
其工作方式是:当建立一个新的段或者段在表空间时,oracle通过一系列的SQL语句来完成这个工作
且和前面的两个字典表有关,在繁忙的系统中会造成竞争和等待(另一个DMT会带来的问题是空间碎片)
本地管理(LMT):
在i的R2版本后成了默认的选项
LMT在表空间的数据文件头部加入了一个位图区域,在其中记录每个extent的使用状况
当extent被使用或者被释放,oracle会更新头部的记录来反映这个变化,不产生回滚信息
因为仅仅操作数据文件头部的几个数据块,不用操作数据字典,LMT比DMT要快,尤其是在繁忙的时候更明显
查看表空间使用的管理方式:
select tablespace_name,extent_management,block_size,status,contents,force_logging,bigfile
from dba_tablespaces
执行结果:
TABLESPACE_NAME EXTENT_MANAGEMENT BLOCK_SIZE STATUS CONTENTS FORCE_LOGGING BIGFILE
------------------------------ ----------------- ---------- --------- --------- ------------- -------
SYSTEM LOCAL 8192 ONLINE PERMANENT NO NO
UNDOTBS1 LOCAL 8192 ONLINE UNDO NO NO
SYSAUX LOCAL 8192 ONLINE PERMANENT NO NO
TEMP LOCAL 8192 ONLINE TEMPORARY NO NO
USERS LOCAL 8192 ONLINE PERMANENT NO NO
EXAMPLE LOCAL 8192 ONLINE PERMANENT NO NO
USER_TEMP LOCAL 8192 ONLINE TEMPORARY NO NO
USER_DATA LOCAL 8192 ONLINE PERMANENT NO NO
GAO LOCAL 8192 ONLINE PERMANENT NO NO
TEMP_ZHEN LOCAL 8192 ONLINE TEMPORARY NO NO
TEMP_ZHEN2 LOCAL 8192 ONLINE TEMPORARY NO NO
11 rows selected
DMT 和LMT 的相互转换
将字典管理的表空间转换为本地管理
exec dbms_space_admin.tablespace_migrate_to_local('表空间名') --表空间名用大写
将本地管理的表空间转换为字典管理
exec dbms_space_admin.tablespace_migrate_from_local('表空间名')
表空间改名:
必须在open状态下,system , sysaux 不能改名
ALTER TABLESPACE XXX RENAME TO YYY
表空间的扩容:表空间的大小由组成它的所有数据文件的大小之和来决定
扩容的方法
(1)重置数据文件大小
ALTER DATABASE DATAFILE '...' | FileNo RESIZE XX
(2)设置数据文件能自动增长
ALTER DATABASE DATAFILE '... '| FileNo AUTOEXTEND ON | OFF NEXT 20M MAXSIZE 300M;
--查看哪些表空间为自动增长
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
(3)添加数据文件
增加到表空间中的数据文件不能直接从表空间中删除,除非删掉整个表空间
增加数据文件将有助于均衡I/O
文件越多,执行一次检查点的代价越高
ALTER TABLESPACE tablespace_name ADD DATAFILE '...' SIZE XX;
ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size 200m autoextend on ;
表空间的四种状态:
online
offline
read only
read write
offline:
一个表空间的正常状态是联机(ONLINE),有时需要将某一个表空间进行脱机,以进行数据库维护
如:
在数据库打开的状态下移动数据文件
在数据库打开的情况下恢复一个表空间或数据文件
执行表空间的脱机备份(虽然可以进行进行联机备份)
使数据库某一部分不可访问,让其它部分能正常访问。
表空间脱机的时候,将产生检查点事件,该表空间上的数据是不能访问的
ALTER TABLESPACE tablespace_name OFFLINE;
联机命令:
ALTER TABLESPACE tablespace_name ONLINE;
在脱机后,有可能无法再联机,这时要做数据的介质恢复
ALTER DATABASE RECOVER TABLESPACE tablespace_name
ALTER TABLESPACE tablespace_name ONLINE;
read only:不能执行DML语句,可以使用的为DDL,DQL语句
ALTER TABLESPACE tablespace_name READ ONLY;
read write:
ALTER TABLESPACE tablespace_name READ WRITE;
查看表空间:
select tablespace_name,file#,v.status,v.enabled
from dba_data_files d,v$datafile v
where d.file_id=v.file#
临时表空间:
select tablespace_name,file#,v.status,v.enabled
from dba_temp_files d,v$tempfile v
where d.file_id=v.file#
将表空间置为只读
注意,readonly 状态下的表空间可以删除数据,仅仅是不能插入或更新数据
alter tablespace GAO READ ONLY
select tablespace_name,file#,v.status,v.enabled from dba_data_files d,
v$datafile v
where d.file_id = v.file# and tablespace_name = 'GAO'
表空间数据文件的重命名或重定位
方法一,在open状态下且处于archive模式:
1、查出数据文件位置和所属的表空间
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_data_files;
2、将数据文件所在的表空间离线
alter tablespace GAO OFFLINE;
4、修改控制文件,将数据文件的指针重新指向到另一个位置(执行rename)
alter tablespace uu rename datafile '源文件'
to '目标文件';
5、表空间在线
alter tablespace GAO online
方法二,不能脱机的表空间
1、关闭数据库,再启动到mount状态
startup mount
2、在操作系统下,移动或重命名文件
host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf
3、修改控制文件
alter database rename file '/disk8/uu.dbf' to '/disk8/uu2.dbf';
4、打开数据库
alter database open;
删除表空间:
意味着表空间和数据文件的信息从数据库中删除,同时也应该将相应的操作系统文件删除
不能删除的表空间
系统表空间
有活动回滚段的表空间
默认
命令:
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]
INCLUDING CONTENTS -- 删除表空间及所有段
INCLUDING CONTENTS [AND DATAFILES] --删除表空间、所有段、数据文件、同时删除系统中的物理文件临时/永久表空间
限制某个用户对表空间的使用:
ALTER USER user_name QUOTA n ON tablespace_name;
ALTER USER scott QUOTA 10m on GAO;
取消限制
ALTER USER user_name QUOTA UNLIMITED ON tablespace_name;
GRANT UNLIMITED TABLESPACE TO user_name;
单个数据文件离线:
1、查看有哪些数据文件
SELECT name FROM v$datafile;
2、离线
ALTER DATABASE DATAFILE '...' OFFLINE;
3、在线
ALTER DATABASE DATAFILE '... ' ONLINE
有可能提示要进行介质恢复:
RECOVER DATAFILE '...' ;
ALTER DATABASE RECOVER TABLESPACE tablespace_name;
之后再将文件再线
重命名数据文件(同前面移动数据文件一样)
获取表空间和数据文件信息
表空间信息
dba_tablespaces
v$tablespace
数据文件信息
dba_data_files(记录数据库实例中所有数据文件及表空间的信息)
v$datafile
--临时数据文件信息
dba_temp_files(记录临时表空间及临时文件的信息)
v$tempfile
SQL> SELECT PROPERTY_NAME,PROPERTY_VALUE FROM DATABASE_PROPERTIES
2 WHERE PROPERTY_NAME LIKE 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_TBS_TYPE SMALLFILE
修改改系统的默认表空间:
SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name
修改系统的默认临时表空间:
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name
查看用户默认表空间:
select USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users
执行结果:
USERNAME USER_ID DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ---------- ------------------------------ ------------------------------
MGMT_VIEW 53 SYSTEM TEMP
SYS 0 SYSTEM TEMP
SYSTEM 5 SYSTEM TEMP
DBSNMP 24 SYSAUX TEMP
SYSMAN 51 SYSAUX TEMP
SCOTT 54 USERS TEMP
OUTLN 11 SYSTEM TEMP
MDSYS 46 SYSAUX TEMP
ORDSYS 43 SYSAUX TEMP
EXFSYS 34 SYSAUX TEMP
DMSYS 35 SYSAUX TEMP
WMSYS 25 SYSAUX TEMP
CTXSYS 36 SYSAUX TEMP
ANONYMOUS 39 SYSAUX TEMP
XDB 38 SYSAUX TEMP
ORDPLUGINS 44 SYSAUX TEMP
SI_INFORMTN_SCHEMA 45 SYSAUX TEMP
OLAPSYS 47 SYSAUX TEMP
TSMSYS 21 USERS TEMP
BI 60 USERS TEMP
USERNAME USER_ID DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ---------- ------------------------------ ------------------------------
PM 59 USERS TEMP
MDDATA 50 USERS TEMP
IX 57 USERS TEMP
SH 58 USERS TEMP
DIP 19 USERS TEMP
OE 56 USERS TEMP
HR 55 USERS TEMP
修改用户默认表空间:
SQL>ALTER USER user_name DEFAULT TABLESPACE tablespace_name
查看表空间的使用情况:
dba_data_files;
dba_free_space;
例:查每个表空间的剩余空间
SQL> select tablespace_name,sum(bytes/1024/1024)
2 from dba_free_space (记录表空间中空闲空间的信息)
3 group by tablespace_name;
TABLESPACE_NAME SUM(BYTES/1024/1024)
------------------------------ --------------------
UNDOTBS1 21.3125
SYSAUX 8.125
USERS 1.5
SYSTEM 3.6875
EXAMPLE 22.3125
USER_DATA 49.875
五、数据文件
数据文件是数据库中最重要的一个要求,是所有的数据库内容存放的地方
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/1024M
FROM V$DATAFILE;
FILE# NAME STATUS ENABLED M
---------- -------------------------------------------------- ------- ---------- ----------
1 G:\ORADATA\ORACLE\SYSTEM01.DBF SYSTEM READ WRITE 490
2 G:\ORADATA\ORACLE\UNDOTBS01.DBF ONLINE READ WRITE 35
3 G:\ORADATA\ORACLE\SYSAUX01.DBF ONLINE READ WRITE 320
4 G:\ORADATA\ORACLE\USERS01.DBF ONLINE READ WRITE 5
5 G:\ORADATA\ORACLE\EXAMPLE01.DBF ONLINE READ WRITE 100
6 G:\ORACLEMDF\USER_DATA.DBF ONLINE READ WRITE 50
7 F:\ZHEN.DBF OFFLINE DISABLED 0
SQL> select tablespace_name,file_name,user_bytes/1024/1024 M
from dba_data_files;
TABLESPACE_NAME FILE_NAME M
------------------------------ -------------------------------------------------------------------------------- ----------
USERS G:\ORADATA\ORACLE\USERS01.DBF 4.9375
SYSAUX G:\ORADATA\ORACLE\SYSAUX01.DBF 319.9375
UNDOTBS1 G:\ORADATA\ORACLE\UNDOTBS01.DBF 34.9375
SYSTEM G:\ORADATA\ORACLE\SYSTEM01.DBF 489.9375
EXAMPLE G:\ORADATA\ORACLE\EXAMPLE01.DBF 99.9375
USER_DATA G:\ORACLEMDF\USER_DATA.DBF 49.9375
GAO F:\ZHEN.DBF
7 rows selected
数据文件的增加与删除
--为GAO增加一个数据文件(该数据文件可删除)
SQL> alter tablespace GAO add datafile 'F:/ZHEN7.dbf' size 10m autoextend on;
--还有一种创建表空间时不指定大小,而是重用一个存在的dbf要用resue参数,reuse 是把原有的结构拿来用,里面的数据是用不了的,因为早都没有了。
--删表空间中的数据文件,g以后的版本才用以下功能,在之前版本的就只能把表空间给干掉。
SQL> alter tablespace GAO drop datafile 'f:/ZHEN.dbf';
alter tablespace GAO drop datafile 'f:/ZHEN.dbf'
ORA-03263: 无法删除表空间 GAO 的第一个文件
一个表空间对应一个第一个文件
SQL> alter tablespace GAO drop datafile 'f:/ZHEN7.dbf';
Tablespace altered
--有数据的数据文件不能删。第一个不能删,如果要删就把表空间干掉,数据文件中有数据写入的文件也不能删除,如下
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 FORCE_LOGGING
------------------------------ --------- -------------
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS LOGGING NO
EXAMPLE NOLOGGING NO
USER_TEMP NOLOGGING NO
USER_DATA LOGGING NO
GAO LOGGING NO
TEMP_ZHEN NOLOGGING NO
TEMP_ZHEN2 NOLOGGING 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;
相关文章推荐
- oracle存储过程及触发器简单案例
- oracle数据库连接
- ORACLE数据库优化
- 常用的oracle数据字典
- oracle之事务和锁
- Oracle 的数据类型
- Linux中oracle数据库执行DBCA,NETMGR,EM等中文乱码问题解决方法
- Oracle数据库基础(五)--索引,触发器
- Oracle数据库基础(四)--视图,序列,存储过程
- Oracle数据库基础(三)--查询
- Oracle数据库基础(二)--数据类型,约束,oracle函数
- Oracle数据库基础(一)
- oracle学习.oracle安装先决条件检查全部失败的解决办法
- 启动OracleOraDb10g_home1TNSListener后自动关闭
- VS2010+Oracle12g C++开发环境搭建笔记
- Jmeter之JDBC Request使用方法(oracle)
- 【新技术】现在最流行的java后台框架组合java springmvc mybaits mysql oracle html5 后台框架源码
- Oracle 创建序列自增
- oracle如何下载相应版本的OPatch和PSU/CPU补丁
- RHEL6+oracle11gR2+ASM+升级到11.2.0.4.8+单实例安装