ITPub博客

首页 > Linux操作系统 > Linux操作系统 > schema

schema

Linux操作系统 作者:mzd75 时间:2013-12-04 17:46:50 0 删除 编辑
oracle
第三天视频3(schema)


一个用户所拥有的所有对象的集合。典型的,针对产品数据库,这个用户不是代表一个人,而是一个应用。(一个应用创建一个用户就行啊)一个schema的名字和用户名相同。SCHEMA对象是逻辑结构,直接指向了数据库的数据,SCHEMA对象包括表、视图、索引。
举例说明schema
屏蔽口令安全特性,将profile中的password limits修改
--sys
SQL> alter user test3 identified by test3;
--test3
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
T                              TABLE
TT                             TABLE
--test4
SQL> select * from test3.t;--目前是没法访问的
select * from test3.t
                    *
ERROR at line 1:
ORA-00942: table or view does not exist
--sys
SQL> grant dba to role_test;

Grant succeeded.
--test4需要重新连接下(此时test4也有啦角色中的DBA权限,必须重新连接啊,否则不好使)
SQL> select * from test3.t;--需要加test3,此时test3是schema的名字,不是用户的名字,因为一个用户下所有对象的集合叫做SCHEMA

no rows selected
SQL> select distinct sid from v$MYSTAT;--当前session是145

       SID
----------
       145
SQL> select username,schemaname from v$session where sid=145;

USERNAME                       SCHEMANAME
------------------------------ ------------------------------
TEST4                          TEST4
SQL> alter session set current_schema=test3;

Session altered.
SQL> select username,schemaname from v$session where sid=145;

USERNAME                       SCHEMANAME
------------------------------ ------------------------------
TEST4                          TEST3
再访问T表的时候就不需要加TEST3啦
SQL> select * from t;

no rows selected
SQL> select * from test3.t;

no rows selected
--SCHEMA有什么用途呢?针对DDL,SYS用户下不能创建触发器,对TEST3用户下的对象执行了DDL语句,我就跟踪你
SQL> create trigger trigger_test
  2  after ddl on test3.schema--这个SCHEMA也可以省略
使用索引是为了提高查询效率,但是使用索引一定能提高查询效率吗?不是的。
视图封装了SELECT 语句,以一个对象的形式保存在数据库里。假如没有视图,也一样能查询。
简单视图完全基于一个表,没有虚拟列、分组函数、集合运算,可以继承约束、索引,对性能并没有什么太大的帮助,封装起来增强了可读性。起到了一定的安全性(比如查询的时候不想让别人查工资,可以写个视图)
SEQUENCES序列,一系列连续的数.
看一道047的题目
Evaluate the following CREATE SEQUENCE statement:
CREATE SEQUENCE seq1 START WITH 100 INCREMENT BY 10 MAXVALUE 200 CYCLE
NOCACHE.
CACHE表示内存的初始化
The sequence SEQ1 has generated numbers up to the maximum limit of 200. You
issue the following
SQL statement:
SELECT seq1.nextval FROM dual.
What is displayed by the SELECT statement?
A. 1
B. 10
C. 100
D. an error--如果是NO CYCLE就报错
Answer:A
has generated numbers up to the maximum limit of 200: 当前已经是最大值200,
请问,nextval将是多少?
注意:即便是start with 100,cycle的时候还是从1开始的,未给出最小值,最小值默认是1
--test3
SQL> create sequence seq_test;

Sequence created.

SQL> CREATE SEQUENCE seq2 START WITH 100 INCREMENT BY 10 MAXVALUE 200 CYCLE NOCA
CHE;

Sequence created.

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       100

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       110

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       120

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       130

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       140

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       150

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       160

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       170

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       180

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       190

SQL> select seq2.nextval from dual;

   NEXTVAL
----------
       200

SQL> select seq2.nextval from dual;--下一个是11,21,一直到191,到191之后又是1了

   NEXTVAL
----------
         1

create sequence SEQ3
minvalue 1
maxvalue 200
start with 201
increment by 10
nocache
nocycle;
SQL> select seq3.nextval from dual;
select seq3.nextval from dual
       *
ERROR at line 1:
ORA-08004: sequence SEQ3.NEXTVAL exceeds MAXVALUE and cannot be instantiated

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/148459/viewspace-1062207/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-11-30

  • 博文量
    74
  • 访问量
    213509