Oracle-表空间/用户的创建与使用

-- 对象  

-- 需要create的都是对象    已学的对象:表 table

-- 普通用户 只能查询user开头的数据字典

select tablespace_name from user_tablespaces;

-- dba用户才能够查询

select tablespace_name from dba_tablespaces;

-- 创建表空间(需要管理员权限 dba用户) 

-- 语法解释

CREATE TABLESPACE  ts_test                      --表空间名字

    LOGGING                                     --启动重做日志     NOLOGGING  加快表空间的创建速度

    DATAFILE 'D:\app\oradata\orcl\ts_test.dbf'  --指定对应的数据文件的位置

    SIZE 10M                                    --设置空间初始值大小

    AUTOEXTEND ON                               --数据文件自动扩展

    NEXT 5M                                     --一次扩展的大小

    MAXSIZE UNLIMITED                           --数据文件最大容量:无限

    EXTENT MANAGEMENT LOCAL                     --表空间本地管理

    SEGMENT SPACE MANAGEMENT AUTO               --存储管理方式,AUTO为自动方式;

--示例:创建表空间

create tablespace bruce01_tsp               

datafile 'C:\app\86136\oradata\orcl\bruce01_tsp.dbf' 

size 10M 

autoextend on 

next 5M 

maxsize unlimited;

--示例:创建临时表空间

create temporary tablespace bruce01_tsp_tmp

tempfile 'C:\app\86136\oradata\orcl\bruce01_tsp_tmp.dbf'

size 10M 

autoextend on 

next 5M 

maxsize unlimited; 

-- 删除表空间

-- 如果表空间有数据,需要加关键字 including contents  否则无法删除成功

--  and datafiles  删除表空间对应的文件

drop tablespace 1; including contents and datafiles;

drop tablespace bruce01_tsp including contents and datafiles;

drop tablespace bruce01_tsp_tmp including contents and datafiles;

-- 工作中经常遇到表空间不足,导致程序报错  需要联系dba或者运维去解决这个问题

--  如果表空间不足,把表空间设置为自动扩展(可能刚开始创建表空间不是自动扩展的)

 ALTER DATABASE DATAFILE   1;(数据文件全路径名)  

     autoextend on;  (在创建表空间时,就可以加上这个关键字,表示该表空间自动扩展)

-- 代码演示 

 ALTER DATABASE DATAFILE 'C:\app\86136\oradata\orcl\bruce01_tsp.dbf'

     autoextend on; 

-- 查看表空间是否为自动扩展

 select file_name,autoextensible,increment_by 

   from dba_data_files 

  where tablespace_name = 1;;

-- 检查系统中所有表空间总体空间

select b.name

      ,sum(a.bytes/1000000)  as 总空间 

  from v$datafile   a

      ,v$tablespace b 

  where a.ts

  group by b.name; 

  -- 查看剩余表空间大小

SELECT tablespace_name          as 表空间

      ,sum(blocks*8192/1000000) as 剩余空间M 

  FROM dba_free_space 

 GROUP BY tablespace_name;

-- 查询oracle表空间的使用情况 (字节换算 byte kb M G)

   select  b.file_id                                         as 文件ID

        ,b.tablespace_name                                 as 表空间

        ,b.file_name                                    as 物理文件名

        ,b.bytes/1000000                               as 总字节数

        ,(b.bytes-sum(nvl(a.bytes,0)))/1000000             as 已使用

        ,sum(nvl(a.bytes,0))/1000000                  as 剩余

        ,round(sum(nvl(a.bytes,0))/(b.bytes)*100,2)          as 剩余百分比

   from dba_free_space a

         ,dba_data_files b

  where a.file_id = b.file_id

  group by b.tablespace_name,b.file_name,b.file_id,b.bytes

  order by b.tablespace_name;

-- 查看每个表table所占的空间

select segment_name, sum(bytes)/1000000 as  所占空间M

  from user_extents

 group by segment_name

 order by sum(bytes) desc;

-- 查询用户

 select * from dba_users;

-- 锁/解锁   在dba用户下解锁普通用户

alter user SCOtt account unlock; -- 解锁用户

alter user SCOtt account lock;   -- 锁用户

-- 语法解释

-- 创建新用户,同时指定表空间和临时表空间

     CREATE USER testuser                  -- 创建用户 testuser

     IDENTIFIED BY pwd123456               -- 设置登录密码

     default tablespace bruce01_tsp        -- 默认表空间 bruce01_tsp 即这个用户下面的对象存在这个表空间

     temporary tablespace bruce01_tsp_tmp  -- 临时表空间

     ACCOUNT UNLOCK;                       -- 解锁用户 新创建的用户无需解锁直接登录  

-- 删除用户

-- 表示删除用户 test_user01 ,同时删除用户下的所有数据对象

 DROP USER test_user01 cascade;

--创建用户:

     CREATE USER test_user01           

     IDENTIFIED BY 123               

     default tablespace bruce01_tsp        

     temporary tablespace bruce01_tsp_tmp  

     ACCOUNT UNLOCK;                       

-- 给用户授予最基本的权限 否则无法登录

GRANT CONNECT,RESOURCE TO test_user01;

-- 新建的用户还有很多权限没有 可以直接给用户赋予dba权限(只是测试,生产不能这么做) 

 -- 测试过程中遇到用户缺什么权限  就授对应的权限就好了

 -- with admin option 表示在获得权限的同时也获得了将这个权限授予其他用户的能力  参数可以省略

 GRANT DBA TO test_user01 WITH ADMIN OPTION;

-- 回收权限

REVOKE DBA FROM test_user01; 

-- ORACLE 过一段时间会提示你改密码 怎么办?

-- oracle的安全策略方面默认一个用户的密码有效期为180天,我们可以直接把这个有效期调成永久

--先查询出用户所属的profile名字  默认 DEFAULT

SELECT username, profile FROM dba_users; 

-- 确认上面查询到的profile的密码有效期

SELECT * FROM dba_profiles WHERE profile =1; AND RESOURCE_NAME=1;;

-- 如果不想让密码过期 那就改成 UNLIMITED 

ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME UNLIMITED; 

你可能感兴趣的:(oracle)