-- 对象
-- 需要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;