Oracle表空间操作详解1.创建表空间:createtablespace<tablespace_name>datafile '<filepath>' size <filesize>autoextend on next <autosize>maxsize<maxsize [unlimited]>eg:createtablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m2.为表空间增加数据文件:altertablespace<tablespace_name> add datafile 'filepath' size <filesize>autoextend on next <autosize>maxsizefilemaxsize[unlimited];eg:altertablespace sales datafile 'c:\2.txt' size 10m autoextend on next 1m maxsize unlimited3.调整表空间:alter database datafile 'filepath' resize <filesize>;--重置表空间的大小eg:alter database datafile 'c:\2.txt' resize 10m在实际使用中我们经常会遇到oracle某个表空间占用了大量的空间而其中的数据量却只占用了少量空间,此时我们可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令来收缩表空间,但在收缩的过程中会遇到ora-03297错误,表示在所定义的空间之后有数据存在,不能收缩,此时的解决办法有:(1). 先估算该表空间内各个数据文件的空间使用情况:SQL>select file#,name from v$datafile;SQL>select max(block_id) from dba_extents where file_id=11;MAX(BLOCK_ID)-------------13657SQL>show parameter db_block_sizeNAME TYPE VALUE----------------------------- ------- ----------- db_block_size integer 8192SQL>select 13657*8/1024 from dual;13657*8/1024-----------106.695313这说明该文件中最大使用块位于106M与107M之间,SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M;alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M*ERROR at line 1:ORA-03297: file contains used data beyond requested RESIZE valueSQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 107M; Database altered.(2).如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。
不过如果是移动到其他的表空间,需要重建其索引。
SQL> alter table t_obj move tablespace t_tbs1;(2)删除某个表空间中的某个数据文件export该表空间的内容:expdp用户名/密码DUMPFILE=XXX.dmp tablespaces=xxx; 1) shutdown (abort)2) startup mount3) alter database datafile 'fullpath_of_removed_DF ' offline drop在非归档模式下,可以使用... offline drop,在归档模式下,使用... offline这个命令的意思并不是从表空间将这个数据文件彻底删除,而是说将这个数据文件“冻结”住:它的scn不在变化,不会再向它写入任何数据;但是原有存在这个文件中对象和数据还可以继续使用。
因此在使用这个命令后,通过修改控制文件将它删除,数据库在启动时就会报文件丢失的错误,并且会在数据字典中产生一个MISGXXXXX的纪录。
因此,以一个数据文件是无法被直接从数据库中删除掉的。
刪除表格空間.SQL> DROP TABLESPACE users INCLUDING CONTENTS and datafiles;在drop users表空間時遇到如下錯誤﹕SQL> DROP TABLESPACE users INCLUDING CONTENTS and datafiles;DROP TABLESPACE users INCLUDING CONTENTS and datafiles*ERROR 在行1:ORA-12919: 無法刪除預設永久表格空間原來在oracle10g中﹐必須為數據庫指定一個默認的永久表空間。
而默認是users表空間﹐所以會出現上面的錯誤信息。
把默認的永久表空間改為system表空間就可以了﹕SQL> alter database default tablespace system;4) SQL> alter database open5)重建被drop掉的表空间,再import前面备份的表空间impdp用户名/密码DUMPFILE=XXX.dmp tablespaces=xxx;4.关闭表空间的自动扩展属性:alter database datafile 'filepath' autoextend offeg:alter database datafile 'c:\2.txt' autoextend off5.打开表空间的自动扩展属性:alter database datafile 'filepath' autoextend oneg:alter database datafile 'c:\2.txt' autoextend on6.使表空间脱机:altertablespacetablespace_name offline7.使表空间联机:altertablespacetablespace_name online8.设置表空间为只读:altertablespacetablespace_name read only9.设置表空间为读写:altertablespacetablespace_name read write11.删除表空间:droptablespacetablespace_name12.删除表空间的同时,删除数据文件droptablespacetablespace_name including contents and datefiles13.查看每个表空间占用空间的大小:selecttablespace_name,sum(bytes)/1024/1024 from dba_segments group by tablespace_name10.oracle中如何移动控制文件,数据文件,日志文件oracle9i/10G-xG中移动控制文件,数据文件,日志文件ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。
windows环境中用:host copy 或host move 其它均相同。
以下是unix或linux环境中,一.移动数据文件:ALTER TABLESPACE方法(联机状态):用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。
$ sqlplus '/as sysdba'#把需要移动的数据文件对应的表空间offlineSQL> alter tablespaceipas_acct_data offline#把数据文件cp到想要放的目录下。
SQL> !mv /opt/oracle/wacosdata/ipas_acct_data001.dbf/opt/oracle/nms/oradata/ipas_acct_data001.dbf#修改表空间中数据库文件的位置。
SQL> alter tablespaceipas_acct_data rename datafile'/opt/oracle/wacosdata/ipas_acct_data001.dbf' to'/opt/oracle/nms/oradata/ipas_acct_data001.dbf'#把表空间online。
SQL> alter tablespaceipas_acct_data online#查看修改结果。
SQL> select file_name from dba_data_files where tablespace_name ='IPAS_ACCT_DATA';ALTER DATABASE方法(脱机状态):用此方法,可以移动任何表空间的数据文件。
$ sqlplus '/as sysdba'SQL> shutdown immediateSQL> !mv /opt/oracle/oradata/wacos002.dbf /ora10g/oradata/wacos002.dbfSQL> startup mountSQL> alter database rename file '/opt/oracle/oradata/wacos002.dbf' to'/ora10g/oradata/wacos002.dbf';SQL> alter database open;SQL> set head offSQL> SELECT file_name from dba_data_files where tablespace_name = 'WACOS';二. 移动控制文件:$ sqlplus '/as sysdba'#我是用的spfile启动的,spfile文件不能修改,所以要做这一步。