首页 > 数据库 > Oracle > oracle 数据文件表空间管理
(1) 查看表空间:
SQL> select * from v$tablespace;
(2) 查看数据文件:
SQL> select * from v$datafile;
(3) 查看tablespace 和data files之间的对应关系(通过表空间的号连接在一起):
SQL> select t1.name ttt,t2.name from v$tablespace t1, v$datafile t2 where t1.ts#=t2.ts#;
注释:t1.name ttt 就是不用name作为列名,用ttt作为列名。
添加、删除表空间
CREATE TABLESPACE pindb LOGGING DATAFILE'/opt/oracle/oradata/pindb/pindb.dbf' SIZE 200m EXTENT MANAGEMENT LOCAL autoallocte SEGMENT SPACE MANAGEMENT AUTO;
drop tablespace megaeyes including contents and datafiles;
创建临时表空间:
CREATE TEMPORARY TABLESPACE temp TEMPFILE 'c:/oracle/oradata/temp02.dbf' SIZE 500M ;
临时文件不能read-only、rename、offline,不能用alter database 来建立临时文件
添加redo 组成员
SQL> alter database add logfile member '/opt/oracle/redo/redo01a.log' to group 1;
然后在切换一下日志,这样才能使新添加的日志成员生效。
Alter database drop logfile group 1;
设置缺省的临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
增加表空间数据文件&扩展表空间数据文件。
增加数据文件:
ALTER TABLESPACE mega ADD DATAFILE '/opt/oradata/mega02.dbf' SIZE 100M; (temp 表空间 tempfile)
扩展现有数据文件:
ALTER DATABASE DATAFILE '/opt/oradata/mega02.dbf' RESIZE 1000M
移动数据文件(注意:temp表空间的不能移动)
表空间必须是offline(使用alter tablespace xxx rename datafile 'xx' to 'xx');
目标数据文件必须已经存在;
如果是不能处于offline状态的表空间则要关闭数据库,将其启动到mount状态,同时目标数据文件必须已经存在。
具体步骤如下:----可以offline的数据文件
1.alter tablespace M33_CTEST offline;
2.! cp /opt/oracle/oradata/conner/users01.dbf /opt/oracle/oradata/users01.dbf
3.alter tablespace M33_CTEST rename datafile '/opt/oracle/oradata/pindb/M33_ctest.dbf' to '/opt/oracle/oradata/m33_ctest.dbf';
4.alter tablespace m33_ctest online;
配置OMF
配置OMF文件来创建表空间的时候DB_CREATE_FILE_DEST会将数据文件存放在缺省的位置。
如果想要更改位置则用 alter system set db_create_file_dest='xx';
用OMF创建表空间:create tablespace xxx; 删除:drop tablespace xxx;
默认32位操作系统ORACLE的块的大小是8k。块定义在表空间一级。9i后一个库支持5个块大小
strings spfileallan.ora |grep -i db_block (-i是不区分大小写查询)
[oracle@mega dbs]$ strings spfilemega.ora |grep db_blo
*.db_block_size=8192 (system temp 表空间一定是这个值)
创建一个非标准块的表空间:
create tablespace tbs1 datafile 'tab' size 10M blocksize 4k; (不过之前要先alter system set db_4k_cache_size=34603008;设置4k的cache值才可以)
truncate table m; 清空表,并把高水位恢复。
delete * from m;这个只能删除数据,不能恢复高水位。
表空间重命名
在 Oracle 10g 以前的版本,更改表空间名字是几乎不可能的事情,除非删除,重新创建,大费周章。
Oracle 10g 新添加了一项更改表空间名字的功能,使得更改表空间名字瞬间即可完成。是个较为人性化的功能。语法很简单:
SQL> ALTER TABLESPACE tablespacename_old RENAME TO tablespacename_new;
因为 system 和 sysaux 这两个表空间的特殊性,是不可以更名的。
undo表空间,如果你用的是spfile则可以在线更改,如果用的是pfile则需要重启才能生效。
我们下面介绍一下删除数据文件
在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。
一、使用offline数据文件的方法
非归档模式使用:alter database datafile '...' offline drop;
归档模式使用: alter database datafile '...' offline;
说明:
1) 以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。
2) 归档模式下offline和offline drop效果是一样的
3) offline后,存在此datafile上的对象将不能访问
4) noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online操作
实际使用案例:
直接删除数据文件后无法进入系统的解决方案
正常情况下,删除表空间的正确方法为:
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。
如果直接删除了数据文件
普通用户登录时,则报错:
ORA-01033: ORACLE initialization or shutdown in progress
sys用户可以正常登录
但进行操作时(SELECT count(1) FROM user_tables),则会报错:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
如果执行命令alter database open以打开数据库时,又报如下错:
ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 12: 'E:ORACLEPRODUCT10.2.0ORADATAORCLTSTEST001.DBF'
说明数据库没找到这个数据文件
因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.
通过以下方法即可解决
解决方法:
sqlplus sys/orcl@orcl as sysdba;
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATAORCLTSTEST001.DBF' offline drop;
SQL> alter database open;
SQL> drop tablespace CTBASEDATA;
二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
sys@ORCL>alter tablespace users add datafile
2 '/u01/app/oracle/oradata/orcl/users02.dbf' size 5M autoextend off;
Tablespace altered.
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- -------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
9 /u01/app/oracle/oradata/orcl/users02.dbf USERS
sys@ORCL>drop table test;
Table dropped.
sys@ORCL>create table test tablespace users
2 as
3 select * from dba_objects;
Table created.
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents where file_id=9;
SEGMENT_NAME FILE_ID BLOCKS
------------------------------ ---------- ----------
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 128
TEST 9 128
17 rows selected.
sys@ORCL>alter table test move tablespace PERFSTAT; --把表移动到其它表空间Table altered.
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
2 where file_id=9;
no rows selected
sys@ORCL>alter tablespace users drop datafile
2 '/u01/app/oracle/oradata/orcl/users02.dbf';
Tablespace altered.
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ---------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
三、oracle 10g可以删除临时表空间的文件
alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/309902/viewspace-1048529/ ,如需转载,请注明出处,否则将追究法律责任。