Что SQL 2005 делает с dll, обеспеченным при регистрации блока?

Если Вы ищете поставщика с долговечностью/устойчивостью и реальным знанием безопасности и как иметь дело с данными предприятия затем всегда существует главный папа всех поставщиков резервного хранилища. Айен-Маунтин. Они были вокруг с 1951 и публично проданы так, можно посмотреть на их финансовое положение там отчеты SEC, если Вы желаете. У них есть большая информация о компании, их истории, их мерах безопасности, дата-центрах, и т.д. на их веб-сайте.

Однако никакой сервис облачной резервной копии не собирается сделать восстановления с нуля. У Вас должно будет быть локальное какое-то решение для резервного копирования при поиске той способности. Если ни для чего иного, чем загрузиться связывают Вашу систему для восстановления данных из облака. Однако Ваш RTO лучше смочь иметь дело со временем это собирается взять для получения данных из облака.

2
задан 26 January 2012 в 19:00
1 ответ

Вам повезло, если исходные развернутые сборки просто отсутствуют, вы все равно можете экспортировать двоичный файл сборки в виде шестнадцатеричной строки.

1. Откройте SSMS и перейдите к Программируемость -> Сборки. Вы должны увидеть свою зарегистрированную сборку, я выделил свою красным.

enter image description here

2. Щелкните правой кнопкой мыши сборку и запишите ее в новое окно запроса:

enter image description here

3. Когда вы это сделаете, вы что-то увидите. вот так:

CREATE ASSEMBLY [Microsoft.SqlServer.Types]
AUTHORIZATION [sys]
FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000...[snipped]
WITH PERMISSION_SET = UNSAFE

Строка с ОТ 0x4D5A90000 ... - это фактическая сборка, закодированная в виде большой шестнадцатеричной строки. См. Ниже, как выполнить экспорт обратно в формат файла.

Убедитесь, что вы также используете сценарии для любых функций, триггеры и т. д., которые также зависят от этой сборки. Вы можете узнать их, выполнив «Просмотр зависимостей» для сборки в SSMS.

У вас должна быть возможность безнаказанно перезагружать сервер, потому что сборка сохраняется и загружается из одной из таблиц системной базы данных (кого имя я могу Не припоминаю, но сборка видна через системное представление sys.assembly_files ), а не в файловой системе.

Однако, если вы не хотите совершать перезагрузку, выполните экспорт, как описано выше, а затем воссоздайте на другом экземпляре SQL 2005, чтобы убедиться, что все в порядке.

Как экспортировать зарегистрированные сборки в файлы

На основании ответа, который я нашел в этой ветке , вы можете экспортировать зарегистрированные сборки обратно в обычные файлы. Если для развертывания сборки использовалась Visual Studio, на сервере SQL также могли бы храниться некоторые объекты исходного кода, что, конечно, является бонусом. Например, когда я запросил свой сервер разработки после развертывания из VS2010, я обнаружил следующее:

SELECT * FROM sys.assembly_files

enter image description here

Как видите, есть несколько файлов, связанных с SqlServerProject2 ( assembly_id = 65540 ). Мы можем экспортировать их все, запустив этот сценарий:

DECLARE @assembly_id int, @name nvarchar(260), @content varbinary(MAX)
DECLARE @ObjectToken INT, @outputdir nvarchar(20)

-- Get assembly id from querying sys.assembly_files
SET @assembly_id = 65540                  -- IMPORTANT: SET THIS VALUE
SET @outputdir = 'D:\Data\Assemblies\'    --            AND THIS PATH

DECLARE assy_cursor CURSOR FOR
  SELECT name, content
  FROM sys.assembly_files 
  WHERE assembly_id = @assembly_id 

OPEN assy_cursor
FETCH NEXT FROM assy_cursor INTO @name, @content

WHILE @@FETCH_STATUS = 0
BEGIN

  SET @name = @outputdir + REPLACE(@name, '\', '-')
  print 'Saving: ' + @name  
  EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
  EXEC sp_OASetProperty @ObjectToken, 'Type', 1
  EXEC sp_OAMethod @ObjectToken, 'Open'
  EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @content
  EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @name, 2
  EXEC sp_OAMethod @ObjectToken, 'Close'
  EXEC sp_OADestroy @ObjectToken

  FETCH NEXT FROM assy_cursor INTO @name, @content
END
CLOSE assy_cursor
DEALLOCATE assy_cursor

Вам нужно будет установить эти две переменные:

SET @assembly_id = 65540
SET @outputdir = 'D:\Data\Assemblies\'

Путь @outputdir должен быть где-то, куда SQL Server имеет права на запись.

Когда вы выполняете сценарий, вы должны получить один или несколько файлов. Если у вас нет всего исходного кода, вы всегда можете декомпилировать полученную сборку с помощью .NET Reflector.

Примечание: Автоматизация OLE (хранимые процедуры sp_OAxxxxx ) по умолчанию отключена в SQL Server, но вы можете включить ее, выполнив:

use master
go
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
2
ответ дан 3 December 2019 в 12:01

Теги

Похожие вопросы