15.Oracle的用户、Schema、数据库、表空间、数据文件的相互关系

1.前言

  今天彻底搞懂Oracle的用户、Schema、数据库、表空间、数据文件的相互关系

2.开始

  在进入抽象的概念之前,可以先看一下网上的这段比喻:

  “我们可以把Database(这里应该是指某一个sid对应的数据库)看做一个大仓库,仓库分了很多很多房间,Schema就是其中的房间,一个schema代表一个房间,table可以看做是每个schema中的床,table(床)被放入每个房间中,不能放置在房间外,user就是每个schema的主人,所以schema包含的是object,而不是user,user和schema是一一对应的,每个user在没有特别指定下只能使用自己schema(房间)的东西,如果一个user想要使用其他schema(房间)的东西,那就要看那个schema(房间)的user(主人)有没有给你这个权限了,或者看这个仓库的老大(DBA)有没有给你这个权限了。换句话说,如果你是某个仓库的主人,那么这个仓库的使用权和仓库中的东西都是你的(包括房间),你有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西都某一个房间,你还可以给每个user分配具体的权限,也就是他到某一个房间能做写什么,是只能看(read-only),还是可以像主人一样有所有的控制权(R/W).这个就要看这个user所对应的角色role了。

3.具体介绍

  (1)数据库:

  Oracle数据库时数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看做是oracle就只要一个大数据库。

  (2)实例

  一个oracle实例(Oracle instance)有一系列的后台进程(Backgroud processes)和内存结构(Memory Structures)组成,一个数据库可以有n个实例。

  (3)用户(user)

  用户是在实例下建立的。不同实例可以建立相同名字的用户。  

-- 创建新用户时,同时要指明表空间和临时表空间(建立创建时就指定表空间名)
 create user testuser
         #profile "default"
         identified by "password123"
         default tablespace ts_test     ##这里要指定默认表空间
         temporary tablespace tmp_ts_test  ##这里指定了临时表空间
         quota 500m on ts_test             ##用户在表空间的限额
         account unlock;                   ##解锁用户

   *关于profile的说明(使用profile文件实现用户口令限制与资源限制)

  profile是口令限制,资源限制的命令集合,建立oracle数据库时,oracle会自动建立命为default的profile,初始化的default没有进行任何口令和资源限制,使用profile有以下一些注意事项:

  1.建立profile时,如果只设置了部分口令或者资源限制选项,其他选项会自动使用默认值(default的相应选项)

  2.建立用户时,如果不指定profile选项,oracle会自动将default分配给相应的数据库用户

  3.一个用户只能分配一个profile。如果要同时管理用户的口令和资源,那么在建立profile时应该同时指定口令和资源选项。

  4.使用profile管理口令时,口令管理选项总是处于被激活状态,但如果使用profile管理资源,必须要激活资源限制。

  *关于profile使用实践

  1)查看当前存在的profile文件 

select distinct profile from dba_profiles;
--查看指定profile文件中各资源的限制情况:
select resouce_name,limit from dba_profiles where profile='DEFAULT';

  2)修改现在profile文件中资源选项: 

1 alter profile default limit FAILED_LOGIN_ATTEMPTS 1 password_lock_time 3;

  3)创建一个新的profile文件

1 create profile lock_accout limit failed_login_attempts 3 password_lock_time 10;

  4)让用户使用新的profile文件:

1 alter user testuser profile lock_accout;

  5)查看用户当前使用的profile文件 

select username,profile from dba_users;

  6)使用profile文件限制用户对资源的使用;

1 --必须先激活资源限制:
2 alter system set resource_limit=TRUE scope=memory;
3 --对资源限制做修改:
4 alter profile lock_accout limit cpu_per_session 5000;

  7)删除profile

1 drop profile lock_accout;

  8)删除profile并将使用当前profile的用户profile改为default

1 drop profile lock_accout cascade;

  9)以下列出所有profile相关参数内容以便参考: 

FAILED_LOGIN_ATTEMPTS:用于指定联系登陆的最大失败次数.
 
PASSWORD_LOCK_TIME:用于指定帐户被锁定的天数.
PASSWORD_LIFE_TIME:用于指定口令有效期
PASSWORD_GRACE_TIME:用于指定口令宽限期.
PASSWORD_REUSE_TIME:用于指定口令可重用时间.
PASSWORD_REUSE_MAX;用于指定在重用口令之前口令需要改变的次数.
PASSWORD_VERIFY_FUNCTION;是否校验口令(校验将值改为VERIFY_FUNCTION)
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU时间.
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU时间(单位:百分之一秒)
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O次数.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.

  (4)schema

  在Oracle中,一般一个用户就对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema,用户是不能创建schema的,schema在创建用户的时候创建,并可以指定用户的各种表空间(这点与pg是不同,pg是可以创建schema并指派给某个用户)。当前连接到数据库上的用户创建的所有数据库对象都默认数据这个schema(在不指明schema的情况下),比如若用户scott连接到数据库,然后create table test(id int null)创建表,那么这个表被创建在了scott这个schema中;但若这样create table testuser.test(id int not null)的话,这个表被创建在了testuser这个schema中,当前前提是权限允许(即testuser用户给scott用户在其schema下创建数据表的权限)。由此看来,schema是一个逻辑概念。

  但一定要注意一点:schema并不是在创建user时就创建的,而是在该用户创建了第一个对象之后才将schema真正创建的,只有user下存在对象,他对应的schema才会存在,如果user下不存在任何对象了,schema也就不存在了。

  (5)表空间

  表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。

  (6)数据文件(dbf、ora)

  数据文件是数据库的物理存储单位,数据库的数据在逻辑上是存储在表空间中的,但真正落地是在某一个或者多个数据文件中。而一个表空间可以由一个或者多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

  

 

 

  

  

 

 

  

  

posted on 2021-10-23 17:17  太白金星有点烦  阅读(2254)  评论(0编辑  收藏  举报

导航