本文主要介绍如何创建用户和表空间,使用的操作用户为system
,可以使用具备操作权限的任何用户进行操作。
# 查询数据库中的表空间文件位置
select * from dba_data_files
根据查询结果确定可以将文件放在/home/oracle/app/oracle/oradata/orcl/
目录下,由于此处是测试环境,用这种方式确定没啥问题。生产环境需要确认目录是否有足够空间,权限等问题。
tbs_expert_temp
-- 创建临时表空间
create temporary tablespace tbs_expert_temp --表空间名称
tempfile '/home/oracle/app/oracle/oradata/orcl/tbs_expert_temp.dbf'--表空间文件文件路径
size 1024m --初始大小
autoextend on --自动扩展
-- 每次扩展128m,无上限(实际上oralce单个表空间文件有上限,当数据块为8K时,上限为32G)
next 128m maxsize UNLIMITED
extent management local;
--创建数据表空间,用于存放表数据
create tablespace tbs_expert_data
datafile '/home/oracle/app/oracle/oradata/orcl/tbs_expert_data.dbf'
size 1024m
autoextend on
next 128m maxsize UNLIMITED
extent management local;
--创建索引表空间,为索引建立单独表空间
create tablespace tbs_expert_index
datafile '/home/oracle/app/oracle/oradata/orcl/tbs_expert_index.dbf'
size 1024m
autoextend on
next 128m maxsize UNLIMITED
extent management local;
-- 查看表空间
select * from dba_tablespaces where tablespace_name like 'TBS%';
-- 查看数据文件
select * from dba_data_files where tablespace_name like 'TBS%';
创建用户expert
,此处我使用的是12c的非Container db
。如果你使用的是Container db
,那么用户名必须以c##
开头,例如c##expert
# 查询是不是Container db,如果返回YES,则是Container db,返回NO,则不是
select CDB from v$database;
-- 返回NO时,创建用户并指定表空间
create user expert identified by expert -- 账号、密码都为expert
default tablespace tbs_expert_data--默认用户表空间
temporary tablespace tbs_expert_temp; --默认临时表空间
-- 返回YES时,创建用户并指定表空间
create user c##expert identified by expert -- 账号c##expert,密码expert
default tablespace tbs_expert_data--默认用户表空间
temporary tablespace tbs_expert_temp; --默认临时表空间
--给用户授予权限
-- 授予连接,资源权限
grant connect,resource to expert ;
-- 授予DBA权限
grant dba to expert ;
--删除空的表空间,但是不包含物理文件
drop tablespace tablespace_name;
--删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
--说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。
drop user username cascade
-- 统计信息
SELECT a.tbs_type,
a.tablespace_name "表空间名",
trunc(a.bytes / 1024 / 1024) "表空间大小(M)",
trunc((a.bytes - b.bytes) / 1024 / 1024) "已使用空间(M)",
trunc(b.bytes / 1024 / 1024) "空闲空间(M)",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
FROM (SELECT '永久' tbs_type, tablespace_name, sum(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name
union
SELECT '临时' tbs_type, tablespace_name, sum(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name
) a,
(SELECT '永久' tbs_type, tablespace_name, sum(bytes) bytes
FROM dba_free_space
GROUP BY tablespace_name
union
SELECT '临时' tbs_type, tablespace_name, sum(free_space) bytes
FROM dba_temp_free_space
GROUP BY tablespace_name
) b
WHERE a.tablespace_name = b.tablespace_name
and a.tbs_type = b.tbs_type
ORDER BY a.tbs_type, ((a.bytes - b.bytes) / a.bytes) DESC;
-- 表空间文件达到上限时添加文件
alter tablespace 表空间名称 add datafile '全路径的数据文件名称' size ***M
autoextend on maxsize 20G;
SELECT file_id, file_name, tablespace_name, autoextensible, increment_by
FROM dba_data_files
WHERE tablespace_name = 'TBS_XX'
ORDER BY file_id desc;
# 添加新的数据文件
alter tablespace tbs_duty add datafile '/home/oracle/app/oracle/oradata/orcl/tbs_XX010.dbf' size 1024M
autoextend on
next 128m maxsize UNLIMITED
extent management local;