--时间:2020年8月24日
--作者:飞翔的小胖猪
二、管理表空间
在oracle数据库中表空间管理分为新建表空间、管理扩容表空间、删除表空间。
2.1 创建数据表空间
新建表空间时需要指定表空间名、表空间文件路径、表空间大小、是否自动增长等参数。
2.1.1 不指定路径创建表空间
创建表空间的时候可以不指定文件路径,系统将会默认的格式创建一个新文件。
SQL> show parameter db_create_file_dest; #查看表空间自动填充目录
SQL> alter system set db_create_file_dest='/app/oracle/oradata/orcl/' scope=both; #设置表空间自动填充目录
SQL> show parameter db_create_file_dest; #查看表空间自动填充目录
SQL> create tablespace test_lvan datafile size 2G; #新建一个名为test_lvan的表空间
SQL> set linesize 200; #设置显示行长度200字符
SQL> col file_name for a60; #设置file_name字段显示长度a60
SQL> col TABLESPACE_NAME for a15; #设置tablespace_name字段显示长度a15
SQL> select file_name,file_id,tablespace_name,round(bytes/1024/1024) total_M from dba_data_files; #查看表空间名及表空间大小
2.1.2 指定路径创建表空间
使用指定路径的方式创建表空间时,首先要确认oracle用户对路径文件夹有读写执行权限。否则将无法正常使用。
SQL> set linesize 200; #设置显示行长度200字符
SQL> col file_name for a60; #设置file_name字段显示长度a60
SQL> col TABLESPACE_NAME for a15; #设置tablespace_name字段显示长度啊5
SQL> select file_name,file_id,tablespace_name,round(bytes/1024/1024) total_M from dba_data_files; #查看表空间名及表空间大小
从命令得知所有表空间的文件均在/app/oracle/oradata/WANWAN/datafile/目录下。
手动指定一个路径创建一个表空间
SQL> create tablespace test_wan datafile '/app/oracle/oradata/WANWAN/datafile/test_wan.dbf'size 2G; #新建一个名为test_wan的表空间,大小为2G。
SQL> select file_name,file_id,tablespace_name,round(bytes/1024/1024) total_M from dba_data_files; #查看表空间名及表空间大小
2.1.3 创建自增长表空间
SQL> set linesize 220; #设置显示行长度220字符
SQL> col tablespace_name for a15; #设置tablespace_name字段显示长度为a15
SQL> col file_name for a75; #设置file_name字段显示长度a75
SQL> select tablespace_name,file_name,AUTOEXTENSIBLE from dba_data_files; #查看表空间是否为自增长
SQL> create tablespace test_auto_add datafile size 2G autoextend on next 100M maxsize 16G; #新建一个初始大小为2G的表空间,开启自动增长,每次增加100M,最大为16G。
SQL> set linesize 220; #设置显示行长度220字符
SQL> col tablespace_name for a15; #设置tablespace_name字段显示长度为a15
SQL> col file_name for a75; #设置file_name字段显示长度a75
SQL> select tablespace_name,file_name,AUTOEXTENSIBLE,round(bytes/1024/1024) total_MB from dba_data_files; #查看表空间是否为自增长
2.1.4 查看获取表空间使用情况
SQL> SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);
2.1.5 扩容表空间
.........