到兰州也已经3天了,作为一名草根工程师加实习生的身份,现在的日子是梦想和艰辛并存。我立志要天天写点技术东西,和大家一同成长。(如果是网络原因的除外)

       接触oracle,我非常困惑的就是数据库,和数据库实例,数据库进程之间的关系。sys,system等DBA用户真是把我搞得头晕眼花。网上搜资料,一屏一屏的出来,看着总是觉着雾里看花,还是一点一点来,从oracle中寻找答案。

         oracle中SGA区域里对数据字典的定义非常好,用户有关的数据字典均以试图形式存在。他们分别是 user_users, all_users, dba_users, user_ts_quotas, dba_ts_quotas.

         对于oracle而言,像linux一样,也有一个万能天神用户,他就是sys用户以sysdba登录。说道sysdba用户,要谈到oracle的启动过程。oracle要先启动oracle服务,再启动oracle数据库,oracle服务的启动过程是 创建实例->启动实例->创建数据库(这时候可以创建数据库)。oracle数据库的启动过程是 启动实例->装载数据库->打开数据库。那么sysdba是来管理实例的,在数据库装载或创建前就已经启动了。dba仅仅是某个数据库的管理员。理解到这里相信大家都明白了为什么在安装oracle一开始就让你填密码,原来是这样。这时也就理解了为什么sys用户的密码是change_on_install 的道理。

        我以sys用户登录数据库。登录之后查看user_user视图

 

 

这里我们知道,user_users视图展示了当前登录用户的信息。包括username(用户名),user_id(用户编号), account_status(账户状态),lock_date (锁定日期) expiry_data(满期日期)  default_tablespace(默认表空间)  temporary_tablespace(临时表空间)。再来看一下all_users视图。

 

可见由sys用户通过all_users 视图找到oracle中所有的可用用户。同理查看dba_users, user_ts_quotas,dba_ts_quotas,结果显示如下:

由以上的对比可知,all_users 和 dba_users均对DBA用户,DBA_USERS视图记录的信息更加丰富。user_ts_quotas和dba_ts_quotas均是针对用户使用表空间进行限制的定义。

当切换到scott用户。scott用户需要先解锁 alter user scott account unlock; 才可以使用

SQL> show user
User is "scott"

SQL>
SQL> select * from user_users;

USERNAME                          USER_ID ACCOUNT_STATUS                   LOCK_DATE   EXPIRY_DATE DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE           CREATED     INITIAL_RSRC_CONSUMER_GROUP    EXTERNAL_NAME
------------------------------ ---------- -------------------------------- ----------- ----------- ------------------------------ ------------------------------ ----------- ------------------------------ --------------------------------------------------------------------------------
SCOTT                                  54 OPEN                                                     USERS                          TEMP                           2005-8-30 1 DEFAULT_CONSUMER_GROUP        

SQL> select * from dba_users;

select * from dba_users

ORA-00942: 表或视图不存在

SQL> select * from all_users;

USERNAME                          USER_ID CREATED
------------------------------ ---------- -----------
SCOTT                                  54 2005-8-30 1
MGMT_VIEW                              53 2005-8-30 1
MDDATA                                 50 2005-8-30 1
SYSMAN                                 51 2005-8-30 1
MDSYS                                  46 2005-8-30 1
SI_INFORMTN_SCHEMA                     45 2005-8-30 1
ORDPLUGINS                             44 2005-8-30 1
ORDSYS                                 43 2005-8-30 1
OLAPSYS                                47 2005-8-30 1
ANONYMOUS                              39 2005-8-30 1
XDB                                    38 2005-8-30 1
CTXSYS                                 36 2005-8-30 1
EXFSYS                                 34 2005-8-30 1
WMSYS                                  25 2005-8-30 1
DBSNMP                                 24 2005-8-30 1
TSMSYS                                 21 2005-8-30 1
DMSYS                                  35 2005-8-30 1
DIP                                    19 2005-8-30 1
OUTLN                                  11 2005-8-30 1
SYSTEM                                  5 2005-8-30 1

USERNAME                          USER_ID CREATED
------------------------------ ---------- -----------
SYS                                     0 2005-8-30 1

21 rows selected

SQL> select * from user_ts_quotas;

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DROPPED
------------------------------ ---------- ---------- ---------- ---------- -------
USERS                              393216          0         48          0 NO

SQL>
SQL> select * from dba_ts_quotas;

select * from dba_ts_quotas

ORA-00942: 表或视图不存在

SQL>

这里我们清楚了,对于scott用户,能查找到的表空间是有限制的。随着慢慢学习的深入,一定能更加透彻的理解oracle的精髓。大家一起加油。