Oracle学习总结--表空间和权限
1.Oracle组件:
物理组件:数据文件,控制文件,日志文件
数据文件 . DBF
数据文件用来存储数据库的数据,如表、索引等。
读取数据时,系统首先从数据库文件中读取数据,并存储到SGA的数据缓冲区中。
日志文件 .LOG
记录对数据库的操作,用来恢复和还原
控制文件 .CTL
控制文件记录了如下信息:
1、数据库的创建时间2、数据文件的位置3、日志文件的位置等
作用是指导数据库 找到数据文件,日志文件并将数据库启动到 open 状态。
逻辑组件:表空间,段,区,数据块 模式
表空间:
表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。
每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
表空间的大小等于构成该表空间的所有数据文件大小之和
CREATE TABLESPACE tablespacename
DATAFILE ‘filename’ [SIZE integer [K|M]]
[AUTOEXTEND [OFF|ON]];
段:
段是构成表空间的逻辑存储结构,段由一组区组成。
按照段所存储数据的特征,将段分为四种类型,即数据段、索引段、回退段和临时段。
区:
区为段分配空间,它由连续的数据块组成。
当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
区不能跨数据文件存在,只能存在于一个数据文件中。
数据块:
数据块是Oracle服务器所能分配、读取或写入的最小存储单元。
Oracle服务器以数据块为单位管理数据文件的存储空间。
模式:
模式是对用户所创建的数据库对象的总称。
模式对象包括表、视图、索引、同义词、序列、过程和程序包等。
2.表空间
create tablespace lzdspace --表空间名
datafile 'D:/lzdspace01.dbf'
--表空间对应的数据文件
size 100M --数据文件大小
autoextend on next 10M
--数据文件不够用自动扩展,每次扩展大小10M
maxsize 1000M
--数据文件最大文件大小
logging --启动重做日志
permanent --指定表空间为永久性的表空间
extend management local autoalllocal --指定新建表空间为本地管理方式的表空间
blocksize 16k
--块大小16k
segment space management auto --指定本地管理表空间中段的存储管理方式,AUTO自动方式,MANUAL手工方式。
--修改表空间的状态:
alter tablespace lzdspace offline|online|readonly|read write
--修改表空间数据文件的大小
alter database datafile 'D:\lzdspace01.dbf' resize 200M;
--添加数据文件
alter tablespace lzdspace add datafile 'D:/lzdspace02.dbf' size 10M;
--删除数据文件
alter tablespace lzdspace drop datafile 'D:/lzdspace01.dbf';
--修改表空间数据文件的自动扩张性
alter database datafile 'D:/lzdspace01.dbf' autoextend on next 5M maxsize 100M;
--删除表空间
drop tablespace lzdspace;
drop tablespace lzdspace including contents and datafiles; --同时删除其数据库对象和数据文件
--查看数据文件
select * from dba_data_files;
--查看表空间
select * from dba_tablespaces;
--赋予用户a使用表空间的权限
grant unlimited tablespace to a;
--只要将a3表空间的限额分配给用户a就可以了,只要在sys下执行
alter user a QUOTA UNLIMITED on a3; --a用户可以无限使用a3表空间
alter user a quota 100M on a3; --a用户可以使用100Ma3表空间的数据
注意:不要手动删除数据文件
3.用户和权限
--创建一个用户lzd,口令为a,默认表空间是users,临时表空间是temp
create user lzd identified by a default tablespace users temporary tablespace temp;
注意:创建此用户后,在没有为这个用户授予相应的连接数据库的权限的情况下,它依然不能连接到数据库. ora-01045错误
权限问题:没有session权限
为 lzd 授予create session权限,再测试
grant create session to lzd;
锁定和解除锁定用户, 临时禁止某个用户访问oracle
--语法: alter user 用户名 account [lock|unlock]
--练习: 对 lzd 用户进行锁定和解除锁定操作
--注意:应以system身份登录操作
alter user lzd account lock;
alter user lzd account unlock;
grant create session,create user to lzd;
--为lzd用户授予create any table 和execute any procedure系统权限,并使用with admin option选项,
--这样它可以将授予自己的权限转授别人.
grant create any table,execute any procedure to lzd with admin option;
--以lzd身份登录系统, 为a用户授予create any table和execute any procedure系统权限.
grant create any table,execute any procedure to a;
--以system身份登录系统,为public用户授予create session权限。因为public 是公共角色,所有的用户都是其成员,所以,系统中所有的用户都拥有联接系统权限.
select * from session_privs;--当前用户所拥有的全部权限
select * from user_sys_privs;--当前用户的系统权限
select * from user_tab_privs;--当前用户的表级权限
select * from dba_sys_privs;--查询某个用户所拥有的系统权限
select * from role_sys_privs;--查看角色(只能查看登陆用户拥有的角色)所包含的权限
--收回授予的系统权限
--语法: revoke 系统权限1[,系统权限2] from 用户名
--以system登录,从a处收回create any table权限
revoke create any table from a;
--收回对象权限
--语法: revoke 对象权限 on 对象名 from 用户名
revoke update on scott.emp from lzd;
--以a登录,查看它的权限
select * from user_sys_privs;
--查看用户的对象权限:
--user_tab_privs_made, 某个用户对另外一个用户授予的权限
--user_col_privs_made, 有关列级的权限
--user_tab_privs_read , 有关某个用户接受的权限
--user_col_privs_read 有关列级对象的权限.
--以scott登录,查看
select * from user_tab_privs_made;