日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle里schema理解

發布時間:2025/3/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle里schema理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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

本文原創,轉載請著名出處、作者

如有錯誤,歡迎指正

郵箱:czmcj@163.com

總結

以上是生活随笔為你收集整理的Oracle里schema理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。