標籤:pyw oracle資料庫 建立 ror sys blank eof 理解 lte
在Oracle中,一個使用者就是一個Schema,表都是建立在Schema中的,也可以理解為每個使用者擁有不同的表。一個使用者想訪問另外一個使用者,也就是另外一個schema的表的時候,
可以用 username.tablename的形式來訪問,完全不需要分散式交易。分散式交易不是給你做這個用的。
Oracle資料庫中不能新建立一個schema,要想建立一個schema,只能通過建立一個使用者的方法解決。
Oracle中雖然有create schema語句,但是它並不是用來建立一個schema的,具體見下面官方文檔。
Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
To execute a CREATE SCHEMA statement, Oracle Database executes each included statement. If all statements execute successfully, then the database commits the transaction. If any statement results in an error, then the database rolls back all the statements.
這裡糾正下網上一些錯誤的觀點,Oracle在建立一個使用者的同時會為這個使用者建立一個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同。官方文檔如下
深入理解user和schema的區別
不同的schema之間它們沒有直接的關係,不同的shcema之間的表可以同名, 也可以互相引用(但必須有許可權),在沒有操作別的schema的操作根權下, 每個使用者只能操作它自己的schema下的所有的表。不同的schema下的同名的表, 可以存入不同的資料(即schema使用者自己的資料)。 好比一個房子,裡面放滿了傢具,對這些傢具有支配權的是房子的主人(user),而不是房子(schema)。
你可以也是一個房子的主人(user),擁有自己的房子(schema)。可以通過alter session的方式
進入別人的房子。 這個時候,你可以看到別人房子裡的傢具(desc)。 如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。 至於你是否有許可權使用(select)、搬動(update)或者拿走(delete)這些傢具就看這個房子的
主人有沒有給你這樣的許可權了,或者你是整個大廈(DB)的老大(DBA)。
如果你想調用其他schema的對象(有許可權的前提下),但並沒有建synonym, 同時又不想把其他schema名字放入代碼中,就可以首先使用
alter session set current_schema=<schema_name>。
實際案例
SQL> SHOW USER;
USER is "SYS"
SQL> alter session set current_schema=SCOTT;
Session altered.
SQL> SHOW USER;
USER is "SYS" #切換Schema並不等同於切換User
SQL> SELECT COUNT(*) FROM EMP;
COUNT(*)
----------
14
SQL> alter session set current_schema=SYS;
Session altered.
SQL> SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> CREATE USER oe111 IDENTIFIED BY oePSWRD;
User created.
SQL> CREATE SCHEMA AUTHORIZATION oe111
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
GRANT select ON new_product_view TO scott
/
*
ERROR at line 1:
ORA-02421: missing or invalid schema authorization identifier
SQL> grant dba to oe111;
Grant succeeded.
SQL> CREATE SCHEMA AUTHORIZATION oe111
2 CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
5 AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
6 GRANT select ON new_product_view TO scott
7 ;
CREATE SCHEMA AUTHORIZATION oe111
*
ERROR at line 1: #切換該語句必須在同一Schema下才能執行
ORA-02421: missing or invalid schema authorization identifier
切換Schema
SQL> CONN OE111/oePSWRD
Connected.
SQL> CREATE SCHEMA AUTHORIZATION oe111
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
GRANT select ON new_product_view TO scott
/
參考至:http://blog.csdn.net/kimsoft/article/details/4627520
http://www.2cto.com/database/201205/131238.html
http://blog.sina.com.cn/s/blog_6c845fae0100peof.html
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6014.htm
本文原創,轉載請著名出處、作者
如有錯誤,歡迎指正
郵箱:[email protected]
Oracle裡schema理解