SYS和SYSTEM 是每个ORACLE 数据库系统缺省安装的两个帐户。SYS 是所有内部数据库表、结构、过程包、等拥有者,此外它还拥有 V$ 和数据字典视图,并创建所有封装的数据库角色(DBA,CONNECT,RESOURCE等)。 Sys是一个唯一能访问特定内部数据字典的用户。System 也是在安装ORACLE 时创建的用户,用于 DBA 任务的管理。
这里有2个概念我们需要明白:
1.V$指的是什么:以V$开头的表我们称为系统性能表,记录oracle运行过程中的信息,是保存在内存中的,我们可以查看。
2.数据字典视图:数据字典就是数据字典,与视图有什么关系?数据字典我们知道是系统维护的,我们不能进行操作,理论上不能查看,但是不能查看又对用户不公平,因此系统提供了视图的形式供我们查看,这样我们就可以使用标准的select语句进行数据的查看了,就相当于SQLServer中的系统表。那么在Oracle中存在3类数据字典视图分别是以“alL_”,“dba_”,“user_”开头进行命名,这三类视图有什么区别呢?是不是权限的问题呀?提起权限我们就有点头大,可以这么说:
user_开头的视图表示这个视图中只存储当前用户的信息,如:
SQL> conn scott/tiger
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as scott
SQL> select table_name from user_all_tables;
TABLE_NAME
------------------------------
BONUS
DEPT
EMP
SALGRADE
表示该用户拥有4张表。
前缀为DBA_的数据字典视图,包含了数据库拥有的所有对象和权限的信息。
前缀为ALL_的数据字典视图,包含了用户当前可以访问的全部对象和权限的信息,该对象也许是其他用户授权的。比如说:
SQL> conn sys/kdk as sysdba
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as SYS
SQL> CREATE USER tellix identified by stephen;--创建用户命令
SQL> grant connect to tellixu;--授权
SQL> grant resources to tellix;-- 授权
SQL> conn tellix/stephen;
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as tellix
SQL> create table test
2 (
3 a number(4),
4 b varchar2(20)
5 );
Table created
SQL> grant all on test to scott;
SQL> conn scott/tiger;
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as scott
SQL> select OWNER,TABLE_NAME from all_all_tables where owner='TELLIX';
OWNER TABLE_NAME
------------------------------ ------------------------------
TELLIX TEST
这里我们把tellix用户的表授权给scott用户,则在scott用户下查询all_all_tables就可以查询出来信息。
说到用户我们不免提到一个词:schema,很多地方说schema就是方案,有些资料中说是模式,呵呵,我认为我们没有必要非要使用汉语来解释,我们就说schema这个词,其实schema就是一个概念,我个人感觉应该这么说:一个用户以及这个用户下所有数据库的对象(如:用户的表,用户的存储过程,用户的函数,视图,同义词,序列等等)的一个统称,很多人问我:如何创建一个schema,schema是数据库对象吗?我认为不是呀,他其实是一个概念而已嘛,那么如何创建呢?我们其实创建一个用户的时候,一个Schema就存在了!我们平时说的schema名称就是用户名而已!
说到这里有必要再罗嗦几句:很多人学习oracle之前可能已经了解了SQLServer了,在SQLServer企业管理器中我们非常容易就可以创建一个数据库,或者使用create database命令就非常方便创建一个数据库,但是在Oracle中创建一个数据库不是一个简单的事情,在同一台服务器上尽管可以创建多个数据库,但是一般情况下只创建一个数据库。这个数据库地位非常高,那么如何区分不同“区域”的数据呢?使用用户,在同一个数据库中,不同用户之间不能相互访问数据(除非授权),这个概念sqlserver中也存在,只是在sqlserver中我们做项目第一件事是创建一个数据库;但是在oracle中我们做项目第一件事是创建一个用户,然后在赋予这个用户所需要的角色权限即可,顺便说一下,一个用户创建成功后至少需要connect,resource两个角色才能进行正常的CRUD操作。
学习Oracle一定要在观念上与sqlserver区分开来。