• 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)

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

      

     

      

      

      

      

  • 相关阅读:
    设计模式学习--适配器模式
    设计模式学习--抽象工厂模式
    设计模式学习--观察者模式
    设计模式学习--建造者模式
    设计模式学习--外观模式
    设计模式学习--模板方法模式
    Java Web(五) 监听器Listener
    Java Web(四) 过滤器Filter
    Java Web(三) Servlet会话管理
    Java Web(二) Servlet详解
  • 原文地址:https://www.cnblogs.com/zmc60/p/15449052.html
Copyright © 2020-2023  润新知