Oracle12c用户和表空间创建

简介

本文主要介绍如何创建用户和表空间,使用的操作用户为system,可以使用具备操作权限的任何用户进行操作。

创建表空间

临时表空间

  1. 确定数据库表空间文件应该放什么地方
# 查询数据库中的表空间文件位置
select * from dba_data_files 

Oracle12c用户和表空间创建_第1张图片
根据查询结果确定可以将文件放在/home/oracle/app/oracle/oradata/orcl/目录下,由于此处是测试环境,用这种方式确定没啥问题。生产环境需要确认目录是否有足够空间,权限等问题。

  1. 创建临时表空间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%';

Oracle12c用户和表空间创建_第2张图片
Oracle12c用户和表空间创建_第3张图片

创建用户

创建用户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;

你可能感兴趣的:(数据库)