oracle体系结构
数据库:指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。(官方)
数据库 = dbms+硬件。 dbms:数据库管理系统。软件。
实例(在oracle里就是数据库:instance。数据库运行时的软件体现。关闭服务或断电时,实例就不存在了,但数据还在。
实例分为:内存+进程。
oracle内存分为:
sga:系统级内存。
pga:进程级内存。
uga:用户级内存。
oracle进程分为:应用进程(bin下面)及服务进程(3个必须运行的服务)。
使用plsql 登录时第三行其实就是实例!
第一行和第二行指的是用户和密码
第四行是“身份”,身份是角色的集合。
oracle体系结构图
一个实例可以拥有多个用户和多有表空间,一个表空间可以有多个用户,但一个用户只能属于一个表空间。
从图中我们可以看出“表空间”其实更类似与mysql里头的数据库。表空间下面才是表,不同表空间下的表相互之间没有关系。
一些结论:
1、一个用户只能属于一个表空间
2、同一个数据库用例中,用户名是不能重复的
3、不同用户中可以创建同名的表
4、表空间创建后需要创建用户后才能使用,因为任何数据库对象都需要建立在一个数据用户上
5、连接dba权限的用户可以直接访问其他用户的数据库对象,否则需要相关用户授权
6、访问其他用户的数据库对象时需要加上对象所属用户的用户名。
Oracle体系结构可划分为物理结构及逻辑结构。
物理结构:oracle运行时所需的文件。
分成3大类:
数据文件---保存所有的逻辑对象,比如表。以及表之间的关系。
SELECT * FROM dba_data_files;
日志文件---记录数据库的“变化”。需要在mount模式下激活。作用:恢复。
SELECT * FROM v$logfile;
控制文件----数据文件及日志文件之间的“桥梁”。
SELECT * FROM v$controlfile;
逻辑结构:数据库在某个层级的逻辑隔离。按从大到小分为:
1、表空间(不同表空间下的对象,在逻辑上完全无关) >
2、!!逻辑对象(表,视图,索引,序列,存储过程,函数,触发器,包,用户,角色....) >
3、段(数据段,临时段,回滚段,索引段) >
4、区间(最小的操作单位) >
5、块(oracle的存储单位,1个快相当于固定的字节数).
逻辑结构图
物理结构
--数据文件--保存所有逻辑对象,比如表以及表和表之间的关系
select * from dba_data_files;
--日志文件--记录数据库的变化,需要在 mount模式下运行,作用:恢复
select * from v$logfile;
--控制文件--数据文件和日志文件之间的桥梁
select * from v$controlfile;
数据字典
--查看全部表空间
select * from dba_tablespaces;
--查看表
select * from all_tables; --当前用户权限内可操作的所有表
select * from user_tables; --当前用户拥有的所有表
--查看用户拥有的角色
select * from user_role_privs;
select * from dba_role_privs where grantee='ZHANGSAN';
--查看角色拥有的权限
select * from dba_sys_privs where grantee='CONNECT';
select * from dba_sys_privs where grantee='RESOURCE';
--创建用户 --ddl dml dcl
create user zhangsan identified by oracle;
grant connect to zhangsan;
grant resource to zhangsan;
create table test(id number primary key, name varchar2(20) not null);
select *from v$session;
select * from v$instance;
用户管理
select username,default_tablespace from dba_users;
select * from dba_tablespaces;
-- 创建表空间
create tablespace classes12
datafile 'D:\oracle\tablespacelocation\classes12.dbf' size 5m
--autoextend on next 5m naxsize 128m
create user lisi identified by oracle;
--修改表空间
alter user lisi default tablespace classes12;
--修改密码
alter user lisi identified by etc123;
--授权
grant connect,resource to lisi;
--用户锁定与解锁
alter user lisi account unlock; --lock
--删除用户
drop user lisi cascade; --cascade 级联删除,删除该用户下所有对象
--删除表空间
drop tablespace classes12 including contents and datafiles; --删除表空间的同时清楚内容以及数据文件
权限管理
--当前用户的角色
select * from user_role_privs;
select * from dba_role_privs where grantee='ZHANGSAN';
--查看角色对应的权限
select * from role_sys_privs where role='RESOURCE';
--查看当前用户给别的用户赋予的权限
select * from dba_tab_privs where grantee='ZHANGSAN';
--查看当前用户所拥有的表
select * from user_tables;
select * from test;
insert into test values(1,'张三');
update test set name='李四' where id=1;
select * from test for update;
--把test表的部分权限赋予scott,然后才能对test进行操作
grant select,insert on zhangsan.test to scott;
select * from zhangsan.test;
sdelete from zhangsan.test;
--收回权限
revoke select on zhangsan.test from scott;
create user lisi identified by oracle;
grant connect,resource to lisi;
grant select,insert on zhangsan.test to public;--public指代所有用户
revoke select,insert on zhangsan.test from public;--public指代所有用户
--权限传递
grant select,insert on zhangsan.test to scott with grant option;--同时同意scott把改权限可以赋予给别人
grant select,insert on zhangsan.test to lisi;
select * from zhangsan.test;
revoke select,insert on zhangsan.test from scott;
--权限给角色
create role myrole;
grant select on zhangsan.test to myrole;
--角色给用户
grant myrole to lisi;