關於SQL Server2005/2008中架構的理解

qdrzq發表於2014-04-29
最近遇到一個案例,原本執行在SQL Server 2000資料庫下的一個系統,由於資料量日漸增大,效能有所下降,所以打算遷移到SQL Server 2008 (64位)下使用.
結果,原本正常的功能卻提示:資料庫中已存在名為 'sRptRPT01' 的物件 ----注:sRptRPT01是儲存過程名字.
關注了一下,SQL Server 2005/2008新增了架構的概念,聯想到Oracle資料庫"模式"(schema)的概念,猜測到這裡所說的"架構"就是指schema,是指特定資料庫使用者所擁有的全體物件的抽象集合,通常與使用者名稱同名(但SQL Server 2005/2008中可以架構名與使用者名稱不同).
簡單做了幾個場景的試驗,得知:

場景1:

安全性/登入,下面新建登入,hsvip,選上資料庫DB_Vip50,預設架構dbo,這樣自動有了資料庫下的使用者;
然後,資料庫下架構,建立hsvip架構屬於hsvip使用者;
最後,修改hsvip使用者,修改其預設架構為hsvip(修改了資料庫/使用者下的預設架構後再看沒儲存住,則需要安全性/登入下面,使用者對映裡面改架構)。
這樣就配置成相容SQL2000的模式,主要關注其建立/刪除表對於所有者的處理細節,
create table tbl_1  或者  hsvip.tbl_1 都是建立hsvip的表
create table dbo.tbl_1 是建立dbo的表
drop table 可以刪除hsvip的表,也可以刪除dbo的表,優先刪除hsvip的表

場景2:
安全性/登入,下面新建登入,hsvip,選上資料庫DB_Vip50,預設架構dbo,這樣自動有了資料庫下的使用者
create table hsvip.tbl_1(col1 varchar(10))
伺服器: 訊息 2760,級別 16,狀態 1,行 1
指定的架構名稱 "hsvip" 不存在,或者您沒有使用該名稱的許可權。
create table tbl_1 (col1 varchar(10)) 可以執行,將建立上dbo的表。
可以drop table tbl_1刪除

場景3:

安全性/登入,下面新建登入,hsvip,選上資料庫DB_Vip50,預設架構dbo,這樣自動有了資料庫下的使用者
然後,資料庫下架構,建立hsvip架構屬於hsvip使用者
create table tbl_1  或者  dbo.tbl_1 都是建立dbo的表
create table hsvip.tbl_1 是建立hsvip的表
drop table tbl_1 可以刪除dbo的表
但刪除hsvip的一定要加hsvip.否則:
伺服器: 訊息 3701,級別 11,狀態 5,行 1
無法對 表 'tbl_1' 執行 刪除,因為它不存在,或者您沒有所需的許可權。

最終,使用場景1的配置方案,使系統正常使用.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29512902/viewspace-1151745/,如需轉載,請註明出處,否則將追究法律責任。

相關文章