表空间使用和管理
- 查看系统当前表空间
--查看dba当前表空间
select * from dba_tablespaces;
- 查看系统当前表空间文件路径
--查看dba当前表空间文件路径
select * from dba_data_files;
- 通过视图查看当前系统所有表空间
--查看表空间信息
select * from v$tablespace;
这里的ID为用户创建表空间的次数。允许最大值为32767。删除再次创建也会消耗次数ID为自增长。图中可以看出ID6过了到9表示中间删除了几次表空间又重新创建。达到最大值后就无法创建了。
- 查看表空间文件信息
--查看表空间文件信息
select * from v$datafile;
- 通过两个视图id关联查询表空间名和文件路径对应关系
--通过id关联查询表空间文件路径和表空间名称对应关系
select ts.name db_name,df.path,df.create_time from v$tablespace ts,v$datafile df where ts.id = df.group_id;
- 创建表空间
--创建表空间使用相对路径时在默认实例文件夹下创建下面语句会在实例默认路径下创建sysdba\tbs01.dbf。表空间初始大小为4096*页大小例如页大小为8k那么最小必须为4096*8k=32M
create tablespace tbs01 datafile 'sysdba\tbs01.dbf' size 32;
--创建表空间使用绝对路径方式
create tablespace tbs01 datafile 'D:\dmdbms\data\tablespace\sysdba\tbs01.dbf' size 32;
--创建表空间设置默认自动扩充(on/off)。并且每次扩充32M(0-2048,不指定默认为1)最大只能扩充到1024M。这里最好设置一下上限否则会无限扩充。
create tablespace tbs01 datafile 'D:\dmdbms\data\tablespace\sysdba\tbs01.dbf' size 32 autoextend on next 32 maxsize 1024;
- 添加表空间文件
--添加表空间文件,增加表空间文件可以使数据存放到不同的分区或者磁盘提高并发性。一个表空间最多只能添加到256个文件。
alter tablespace tbs01 add datafile 'D:\dmdbms\data\tablespace\sysdba\tbs01_2.dbf' size 32;
--添加表空间文文件时也可以设置是否自动扩充,增长值以及最大上限
alter tablespace tbs01 add datafile 'D:\dmdbms\data\tablespace\sysdba\tbs01_2.dbf' size 32 autoextend on next 32 maxsize 1024;
- 修改表空间文件属性
--修改表空间文件时也可以添加是否自动扩展、扩展多少、最大值属性
alter tablespace tbs01 datafile 'D:\dmdbms\data\tablespace\sysdba\tbs01_2.dbf' autoextend on next 32 maxsize 1024;
- 表空间脱机
--让表空间进入脱机状态,此时可以进行对文件移动操作。
alter tablespace tbs01 offline;
- 移动表空间
--移动表空间。移动之前需要让表空间进入脱机状态。移动完成后在恢复联机状态
alter tablespace tbs01 rename datafile 'sysdba\tbs01.dbf' to 'D:\dmdbms\data\tablespace\sysdba\tbs01.dbf';
- 移动系统表空间或回滚空间
系统表空间和回滚表空间也可以进行自动扩展、增加表空间文件、设置增长值、设置最大值等相关属性操作。唯一不同的是表空间名称不能修改。而且路径时存放在dm.ctl二进制控制文件中。想要修改路径则需要修改dm.ctl文件。此操作需要在数据库服务关闭状态下进行操作。具体修改步骤如下:
- 首先要关闭数据库服务然后使用dmctlcvt工具将dm.ctl文件转换为文本文件如图所示:
执行命令:./dmctlcvt type=1 src=/home/dmdba/data/DMOA/dm.ctl dest=/home/dmdba/dmctl.txt即可。也可以./dmctlcvt help查看帮助信息,如果所示:
- 编辑生产好的dmctl.txt文本文件并修改ROLL.dbf文件的路径
把路径修改为/home/dmdba/ROLL.DBF
- 把文件拷贝到新的目录mv /home/dmdba/data/DMOA/ROLL.DBF /home/dmdba/ROLL.DBF拷贝时使用dmdba权限
- 把修改好的dmctl.txt文件再转换成dm.ctl二进制文件
- 启动数据库服务即可
- 验证是否正常如果如果先不拷贝ROLL.DBF文件到新目录,启动数据库则会报找不到ROLL.DBF文件错误
- 重新拷贝ROLL.DBF文件到指定目录在启动数据库服务则启动正常说明修改成功。记得使用dmdba权限
- 如果控制文件修改失误数据库默认在实例路径下的ctl_bak文件夹下有10个控制文件备份。选择一个合适的时间点还原回去即可
此修改方法可以修改其它表空间路径还有联机日志甚至移动实例路径等。移动实例路径可以参考zyj实例操作。
- 恢复表空间联机状态
--恢复表空间在线
alter tablespace tbs01 online;
- 重命名表空间
--重命名表空间,可以在线重命名
alter tablespace tbs01 rename to tbs02;
- 删除表空间
--删除表空间只能删除未使用或者空的表空间。对于已经使用的需要删除对应的用户和数据才能删除,系统表空间不能删除
drop tablespace tbs01;
- 表空间文件失效检查
通过调整dm.ini参数中FIL_CHECK_INTERVAL中配置来自动开启检查或者不检查0为检查1为不检查。
--查询表空间失效检查参数0为不检查1为检查
select * from v$dm_ini where para_name like 'FIL_CHECK_INTERVAL';
或者使用SP_FILE_SYS_CHECK();系统过程手动开启检查。开启后一旦执行对应表空间操作就会告警提示表空间被删除。