昨天看了一下EntLib3中的模塊Data部分時,看到一個script.有個系統存儲過程票了一眼.sp_dboption的存儲過程.這個是什麼設置.
原來是配置數據庫屬性的.運行了一下exec sys.sp_dboption.有26個屬性可以設置,當看到select into/bulkcopy的時候.很親切,因爲這個
屬性用過好幾次,想測試一下.這個按照msdn上的屬性是阻止對數據庫進行select into.
use master
exec sys.sp_dboption '數據庫名','select into/bulkcopy',true/false
運行成功後,我測試了下面語句
use whtai
select * into sp7 from student where 1=2
奇怪,怎麼可以通過,我已經false掉了.怎麼還可以select into.沒有道理啊.沒辦法.
看了一下系統的存儲過程sys.sp_dboption.看了一下,怎麼最後變成了.
ALTER DATABASE [whtai] SET RECOVERY simple WITH NO_WAIT
其中whtai是數據庫名,simple 是恢復模式.在系統存儲過程把參數中的true/false 變成了full/bulk_logged.
怎麼跟看到的解釋不一樣.
接下來測試了一下.
數據庫的恢復模式是simple .
運行
use master
exec sys.sp_dboption '數據庫名','select into/bulkcopy',true/false
不起作用.
當我把數據庫的恢復模式改爲full.或者bulk_logged 的時候,起作用了.參數中的true,對應的恢復模式是full. false 對應bulk_logged
當我在msnd
http://technet.microsoft.com/zh-cn/library/ms188029.aspx
上看到into子句的解釋時.這才瞭解:
SELECT...INTO 的日誌記錄量取決於對數據庫有效的恢復模式。在簡單恢復模式或大容量日誌恢復模式下,大容量操作是最小日誌記錄操作。對於按最小方式記錄日誌,使用 SELECT… INTO 語句可能比創建一個表後使用 INSERT 語句填充該表效率更高。
使用最小日誌記錄插入行
下面的示例創建 dbo.NewProducts
表並從 Production.Product
表插入行。此示例假定 AdventureWorks
數據庫的恢復模式設置爲 FULL。若要確保最小方式記錄,應在插入行之前將 AdventureWorks
數據庫的恢復模式設置爲 BULK_LOGGED,並在 SELECT...INTO 語句後重置爲 FULL。此過程確保 SELECT...INTO 語句在事務日誌中佔用最少的空間並且高效執行。
USE AdventureWorks;
GO
IF OBJECT_ID ('dbo.NewProducts', 'U') IS NOT NULL
DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks SET RECOVERY BULK_LOGGED;
GO
SELECT * INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks SET RECOVERY FULL;
GO
這是msdn上的一個例子.通過例子我們看到select into/bulkcopy是設置恢復模式的.通過設置數據庫的恢復模式,使得在使用
select into 語句的時候.事務的日誌量達到最少.
可是有沒有這樣的設定,限制對一個數據庫進行 select into .期待高手回覆.