DB2的Schema


數據庫中Schema有兩種含義,

一種是概念上的Schema,指的是一組DDL語句集,該語句集完整地描述了數據庫的結構;

還有一種是物理上的 Schema,指的是數據庫中的一個名字空間,它包含一組表、視圖和存儲過程等命名對象。簡單的說,Schema就是一個(數據庫)用戶所擁有的數據庫的對象;

在一個數據庫中可以有多個應用的數據表,這些不同應用的表可以放在不同的schema之中,同時,每一個schema對應一個用戶,不同的應用可以以不同的用戶連接數據庫,這樣,一個大數據庫就可以根據應用把其表分開來管理。不同的schema之間它們沒有直接的關系,不同的shcema之間的表可以同名,也可以互相引用(但必須有權限),在沒有操作別的schema的操作根權下,每個用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數據(即schema用戶自己的數據).

數據庫中的User和Schema到底什么關系呢?

其實User就是每個Schema的主人,如果當前操作數據庫的用戶有默認的Schema(在創建用戶的時候指定了),那么新表被創建在默認的Schema上。

通過這樣的方法,主要是方便管理。

在DB2中的schema的概念和ORACLE中的概念有着本質的區別:在ORACLE中schema和用戶是同一個;在DB2中schema不一定是用戶,因為db2內部沒有用戶的概念,連接用戶必須是操作系統用戶

查詢當前存在的Schema

db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata"

 

在有些情況下,當前登錄用戶所要訪問的Schema可能並不是默認分配給他的Schema,這時查詢表前就需要一個前綴來約束所要訪問的Schema。

如:

db2 "SELECT * FROM wanted_schema_name.table_name"

或通過下面的命令可以修改當前Schema

SET CURRENT SCHEMA = 'PAYROLL'
SET SCHEMA 'PAYROLL'

 

在開發過程中,可以通過修改連接字符串來修改默認連接的Schema/Sqlid,

以JDBC為例(最后的分號一定不能省略):

jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;

db2 切換 schema 及執行腳本

在windows 下測試過

 1 打開 cmd 命令
 2 
 3 db2cmd
 4 
 5 db2 connect to test user meta using portaldb ----連接數據庫
 6 
 7 db2 select current schema from sysibm.sysdummy1 ----查看當前數據庫默認的schema
 8 
 9 db2 set current schema bast ---設置schema
10 
11 db2 select current schema from sysibm.sysdummy1 ---查看是否設置成功
12 
13 db2 -tvf d:\\meta\meta_ddl.sql --在指定的schema執行建表語句

 

DB2 將schema下所有表的權限賦予一個用戶

db2 "select 'db2 grant select on table DB2INST2.'|| tabname ||' to db2inst1' from syscat.tables where tabschema='DB2INST2'"

單獨對某個Schema下的表進行授權

C:\Users\Administrator>db2 grant select on table zssqsong.kc_team_user to user zssqding

DB20000I SQL 命令成功完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM