当前位置:网站首页>ORACLE进阶(五)SCHEMA解惑

ORACLE进阶(五)SCHEMA解惑

2022-07-07 10:55:00 InfoQ

一、定义

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 TESTSYSTEM TEST

上面这个查询就是我说将
schema
作为user的别名的依据。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/c91b83100f9b1d5b61f50b022