当前位置:  数据库>oracle

深入探讨:oracle中方案的概念以及方案与数据库的关系

    来源: 互联网  发布时间:2014-09-07

    本文导语:  首先先理解方案的概念,然后再理解方案与数据库的关系。 先来看一下他们的定义: 代码如下:A schema is a collection of database objects (used by a user.). Schema objects are the logical structures that directly refer to the database's data. A user is a name defi...

首先先理解方案的概念,然后再理解方案与数据库的关系。

先来看一下他们的定义:

代码如下:

A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database's data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.

从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。

一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到 schema名都为数据库用户名的原因。Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决 (Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省 shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。

一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过 select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
咳,说了这么多,给大家举个例子,否则,一切枯燥无味!
代码如下:

SQL> Gruant dba to scott
SQL> create table test(name char(10));
Table created.
SQL> create table system.test(name char(10));
Table created.
SQL> insert into test values('scott');
1 row created.
SQL> insert into system.test values('system');
1 row created.
SQL> commit;
Commit complete.
SQL> conn system/manager
Connected.
SQL> select * from test;
NAME
----------
system
SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改变用户缺省schema名
Session altered.
SQL> select * from test;
NAME
----------
scott
SQL> select owner ,table_name from dba_tables where table_name=upper('test');
OWNER TABLE_NAME
------------------------------ ------------------------------
SCOTT TEST
SYSTEM TEST

--上面这个查询就是我说将schema作为user的别名的依据。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。 通过以上解释,应该很容易明白什么是方案了,我再分析一下方案与数据库之间的关系。

上文已经提到过方案是用户使用的数据库对象的集合,一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。

我们只能以某一身份登陆某一数据库,然后再该数据库中进行操作;但是一个用户登陆某个数据库后,可以在该数据库中操作各个不同方案的数据库对象。也就是说一个数据库是由各种不同方案的数据库对象组成;而一个方案是由不同数据库里的该方案的数据库对象组成。

例如:我们安装ORACLE数据库时系统默认生成一个名为ORCL的数据库,安装完之后,我们再创建一个名为FATEST的数据库,这个时候,我们以 SYS的身份登陆ORCL数据库,我们发现系统默认的用户(包括SYS/SYSTEM/SYSMEN等等)都有自己相应的方案。此时我们再创建一个用户:TESTUSER,系统会为TESTUSER自动产生一个同名的方案名。然后我们可以创建表AA,并且属于方案TESTUSER;也可以创建同名的表 AA,但是属于SYS。同理,我们可以以TESTUSER用户的身份登陆ORCL操作该数据库其他方案的数据库对象。

但是我们却不能操作FATEST中的数据库对象。再登陆FATEST创建表TESTUSER.BB、TESTUSER.AA,那么方案TESTUSER的数据库对象包括FATEST数据库中的表AA、BB以及其它默认对象、ORCL的表AA以及其它默认对象。


    
 
 

您可能感兴趣的文章:

  • 大家能否深入探讨一下J2EE到底包含那些东东,在实际企业应用是否如同J2EE所承诺的一样!
  • 深入探讨:main函数执行完毕后,是否可能会再执行一段代码?
  • 深入探讨:Oracle中如何查询正锁表的用户以及释放被锁的表的方法
  • 基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
  • 深入探讨java的接口和抽象的内涵!
  • 深入探讨java的接口和抽象的内涵!(续上贴,上贴分已给)
  • C++实现strcmp字符串比较的深入探讨
  • 深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较
  • 深入探讨C#中的结构struct
  • 整体刷新和局部刷新frameset窗口问题深入探讨
  • 用32位int型变量表示单引号括起来的四个字符的深入探讨
  • 深入探讨CSS中字体元素
  • 深入探讨C#中的const、readonly关键字
  • 函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
  • 深入探讨:oracle中row_number() over()分析函数用法
  • 深入探讨C++父类子类中虚函数的应用
  • 深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数
  • Java源码分析:深入探讨Iterator模式
  • 深入探讨Linux静态库与动态库的详解(一看就懂)
  • 深入探讨JAVA中的异常与错误处理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢
  • 问一个《深入理解计算机系统》中的问题
  • 深入多线程之:深入分析Interlocked
  • ##想买书深入学习linux下的编程,请指教
  • 深入JDBC sqlserver连接写法的详解
  • 深入oracle特定信息排序的分析
  • 深入分析C中不安全的sprintf与strcpy
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3