成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server Assembly還原數據庫后的問題

數據庫 SQL Server
今天我們將介紹在SQL Server Assembly還原數據庫中,如果備份的數據庫存在EXTERNAL_ACCESS 和UNSAFE的程序集,那么在還原的時候程序集會出現一些奇怪的錯誤。

前端時間給別人做遷移數據庫時候,遇到一些問題.大致是,如果備份的數據庫存在EXTERNAL_ACCESS 和UNSAFE的程序集,那么在還原的時候程序集會出現一些奇怪的錯誤:

消息 10314,級別 16,狀態 11,第 1 行

在嘗試加載程序集 ID 65536 時 Microsoft .NET Framework 出錯。服務器可能資源不足,或者不信任該程序集,因為它的 PERMISSION_SET 設置為 EXTERNAL_ACCESS 或 UNSAFE。請重新運行查詢,或檢查有關的文檔了解如何解決程序集信任問題。有關此錯誤的詳細信息:

System.IO.FileLoadException: 未能加載文件或程序集“testclr, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一個依賴項。異常來自 HRESULT:0x80FC80F1
System.IO.FileLoadException: 

在 System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) 

在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 

在 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 

在 System.Reflection.Assembly.Load(String assemblyString)

至于產生的原因大概是,在備份數據庫的時候,在機器A,那么數據庫的擁有者是A\Administrator(如果用windows登錄創建),那么但是我們還原到服務器B,那么擁有者可能是B\Administrator,那么SQL CLR的安全性會認為該程序集不可靠.

例如:

我首先創建一個簡單的SQL CLR 存儲過程:

  1. using System;using System.Data;  
  2. using System.Data.SqlClient;  
  3. using System.Data.SqlTypes;  
  4. using Microsoft.SqlServer.Server;    
  5. public partial class StoredProcedures{   
  6.  [Microsoft.SqlServer.Server.SqlProcedure]      
  7. public static void Test()    {        
  8. // 在此處放置代碼    }};編譯創建程序集.  
  9.  

在機器A上的數據庫上執行:

  1. CREATE DATABASE test;   
  2. USE test;   
  3. ALTER DATABASE test SET TRUSTWORTHY ON;   
  4. CREATE ASSEMBLY [TestCLR] FROM 'E:\Documents\Visual Studio 2010\Projects\TestCLR\TestCLR\bin\Release\TestCLR.dll' 
  5. WITH PERMISSION_SET = EXTERNAL_ACCESS;  
  6. --SAFE;  
  7. CREATE PROC dbo.usp_testASEXTERNAL NAME [TestCLR].StoredProcedures.Test;   
  8. EXEC dbo.usp_test;   
  9. USE master;   
  10. BACKUP DATABASE test TO DISK = 'c:\test.bak' WITH FORMAT;  
  11.  

將c:\test.bak copy 到機器B上,然后執行:

USE [master];--還原數據庫RESTORE DATABASE test FROM DISK = 'c:\test.bak' WITH RECOVERY,MOVE 'test' TO 'E:\data\test.mdf',MOVE 'test_log' TO 'E:\data\test.ldf',REPLACE;

--如果沒有啟用CLR,開啟EXEC sp_configure 'clr enabled',1RECONFIGURE WITH OVERRIDE; USE test;

--查看程序集,是存在的.SELECT * FROM sys.assemblies;SELECT * FROM sys.assembly_files;

--還原之后的數據庫TRUSTWORTHY 都是OFF的,需要重新設置ALTER DATABASE test SET TRUSTWORTHY ON; USE test;

--執行存儲過程EXEC dbo.usp_test;

但是一執行就報錯了.

解決方案:

在還原數據庫之后,我們可以將數據庫的OWNER設置成SA.

exec sp_changedbowner 'sa'

再調用存儲過程就是成功的.

可以查看:KB http://support.microsoft.com/kb/918040

后來經過一些整理,發現當SQL CLR 存在EXTERNAL_ACCESS或者是UNSAFE的程序集的時候,SQL Server會檢查DBO的SID在sys.databases 和sys.server_principals是否一致.

因此我們可能未必一定要修改成sa 的,只要所有者的SID在sys.databases和sys.server_principals 是一致的,就不出問題.

我們在SSMS里面右鍵數據庫屬性->找到文件選項卡->發現在所有者(是空的,還原以后原來的SID,數據庫所有者在當前的sys.server_principals不匹配的),我們可以在 [...] 里面選擇一個,具有創建CREATE ASSEMLY 權限的所有者就好,我選擇了B\Administrator,然后測試 CLR 存儲過程,沒問題,

引深:

在SQL Server 復制里面也存在類似的問題,就是我們做 "對等復制" 的時候,會出現DBO不存在,以及sp_replcmd 不存在類似的錯誤.其實也是因為對等復制初始化訂閱是通過 RESTORE 來實現的,因此只要簡單的修改數據庫所有者 就好了....那么對等復制的問題也就解決了!!

原文鏈接:http://www.cnblogs.com/bhtfg538/archive/2011/01/18/1938295.html

【編輯推薦】

  1. SQL Server 2000刪除實戰演習
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串數據類型的具體描述
  5. SQL Server數據類型的種類與應用
責任編輯:彭凡 來源: 博客園
相關推薦

2011-03-24 09:24:08

SQL Server數還原

2010-09-14 09:53:52

sql server還

2010-06-17 10:02:12

SQL Server數

2010-07-08 11:23:41

SQL Server還

2010-07-06 15:07:37

SQL Server

2011-03-15 09:55:07

SQL Server2數據庫崩潰還原數據庫

2010-06-18 12:45:20

SQL Server數

2010-11-10 09:44:31

SQL Server端

2010-07-15 17:28:50

SQL Server

2011-03-10 08:42:15

SQL Server備份還原

2011-04-06 16:15:21

SQL Server數簡體繁體

2010-07-08 11:05:14

SQL Server數

2010-07-06 14:40:15

解決SQL Serve

2011-03-24 09:07:11

SQL Server數備份

2011-03-24 09:45:34

SQL Server數恢復

2010-09-27 16:53:49

還原SQL數據庫

2011-03-15 09:46:20

SQL Server 數據庫崩潰

2021-05-17 06:57:34

SQLServer數據庫

2009-09-17 16:16:29

wsus服務器

2017-05-25 08:52:08

SQL Server數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 拍真实国产伦偷精品 | 精品欧美一区二区三区久久久 | 欧美一级片a | 成人午夜免费视频 | 国产精品成人国产乱 | 免费看黄视频网站 | 激情 婷婷 | 免费成年网站 | 偷拍亚洲色图 | 国产在线精品一区二区三区 | 精品欧美二区 | 欧美国产日本一区 | 中文字幕一区二区三区四区五区 | 日韩快播电影网 | 91美女在线观看 | 日韩快播电影 | 国产精品久久久久久久久久免费 | 国产免费一区二区 | 婷婷丁香激情 | 日韩一区二区三区在线观看 | 在线天堂免费中文字幕视频 | 欧美一区永久视频免费观看 | 日韩电影中文字幕在线观看 | a中文在线视频 | 亚洲一区二区三区四区五区午夜 | 日韩国产一区二区三区 | 亚洲欧美男人天堂 | 国产一级电影在线 | 欧美在线成人影院 | 国产黄色大片网站 | 人妖一区 | 日韩电影一区 | 日本福利片 | 三级高清 | 天天草天天干天天 | 国产日韩欧美在线观看 | 精品久久久久久亚洲精品 | 精品视频免费在线 | 成人精品一区二区三区四区 | 在线视频中文字幕 | 亚洲精品一区在线 |