oracle数据库表空间介绍及常用SQL

 

ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的
oracle中的表就是一张存储数据的表。表空间是逻辑上的划分。方便管理的。
数据表空间 (Tablespace)        
存放数据总是需要空间, Oracle把一个数据库按功能划分若干空间来保存数据。当然数据存放在磁盘最终是以文件形式,所以一般一个数据表空间包含一个以上的物理文件
数据表        
在仓库,我们可能有多间房子,每个房子又有多个货架,每架又有多层。 我们在数据库中存放数据,最终是数据表的单元来存储与管理的。
数据文件        
以上几个概念都是逻辑上的, 而数据文件则是物理上的。就是说,数据文件是真正“看得着的东西”,它在磁盘上以一个真实的文件体现
1.1、创建表空间:
格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小
create tablespace data_test datafile 'e:\oracle\oradata\test\data_1.dbf' size 2000M;
create tablespace idx_test datafile 'e:\oracle\oradata\test\idx_1.dbf' size 2000M;
(*数据文件名 包含全路径, 表空间大小 2000M 表是 2000兆) 

    1.2、 创建临时表空间,临时表空间用于用户执行查询时要使用的缓存空间。

 文件路径保存在/opt/oracle/oradata/biee目录

CREATE TEMPORARY TABLESPACE DW_TEST_TMP_TBS
TEMPFILE '/opt/oracle/oradata/biee/DW_TEST_TMP_TBS01.dbf'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
2、建好tablespace, 就可以建用户了
格式: create user 用户名 identified by 密码 default tablespace 表空间表;
create user study identified by study default tablespace data_test;
(*我们创建一个用户名为 study,密码为 study, 缺少表空间为 data_test -这是在第二步建好的.)
(*缺省表空间表示 用户study今后的数据如果没有专门指出,其数据就保存在 data_test中, 也就是保存在对应的物理文件 e:\oracle\oradata\test\data_1.dbf中)
3. 创建用户并指定表空间
CREATE USER cici IDENTIFIED BY cici PROFILE DEFAULT DEFAULT TABLESPACE CICI ACCOUNT UNLOCK;
create user jykl identified by jykl default tablespace jykl_data temporary tablespace jykl_temp;
授权给新用户
GRANT connect, resource TO cici;
grant create session to cici;
4. 授权给新用户
grant connect,resource to study; 
--表示把 connect,resource权限授予study用户
grant dba to study;
--表示把 dba权限授予给 study

  5.  可以查询表空间使用状况的SQL

SELECT 
    a.tablespace_name 表空间名称, 
    total 总计, 
    total - free 已使用, 
    free 空闲, 
    round((total - free) / total * 100, 2) 使用占比
FROM (
    SELECT tablespace_name
        , round(SUM(bytes) / 1024 / 1024) AS total
    FROM dba_data_files
    GROUP BY tablespace_name
) a
    LEFT JOIN (
        SELECT tablespace_name
            , round(SUM(bytes) / 1024 / 1024) AS free
        FROM dba_free_space
        GROUP BY tablespace_name
    ) b
    ON a.tablespace_name = b.tablespace_name
ORDER BY (total - free) / total DESC;

查询结果如下,这样就可以清晰的看到数据库的具体使用情况啦。

不要等到Oracle磁盘空间满了,再去查表空间使用情况

6. 查看表空间的名称及大小

SELECT t.tablespace_name
    , round(SUM(bytes / (1024 * 1024)), 0) AS ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;

7. 查看表空间物理文件的名称及大小

SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 

参考链接:https://www.cnblogs.com/wyf0518/p/11319868.html
https://www.cnblogs.com/qmfsun/p/3817344.html
https://www.cnblogs.com/30go/p/7910690.html
posted @ 2020-04-01 00:43  快看,阳光!  阅读(818)  评论(0编辑  收藏  举报