Архив за месяц: May 2011

Известная ошибка при попытке редактирования пакетов DTS:

описана здесь, но в статье две ссылки – Microsoft SQL Server 2008 Feature Pack page и Feature Pack for Microsoft SQL Server 2005 page.

Microsoft SQL Server 2005 Backward Compatibility Components доступен по обеим ссылкам, но версия только по второй будет работать с 2008R2 (несмотря на то, что дата релиза Feature Pack указана более ранняя).
Кроме того, здесь, в первом комментарии указаны правильные пути копирования *.dll и *.rll файлов.
В SSMS 2012 управление DTS пакетами больше не поддерживается.

При миграции БД с SQL Server 2000 на SQL Server 2005 выяснилось, что строка

RAISERROR ('test error %S', 16, 1, @test)

из-за неверно написанного %S вместо %s в SQL Server 2000 работает просто неверно (возвращает только первый символ параметра), а в SQL Server 2005 не создает процедуру совсем:
Msg 2787, Level 16, State 1, Line 6
Invalid format specification: ‘%S’.

Т.к. такое написание могло встретиться в любой процедуре, найдем их все:

SELECT name FROM sys.procedures WHERE CHARINDEX ( '%S', OBJECT_DEFINITION(object_id) COLLATE Latin1_General_CS_AS) >0

После исправления RAISERROR работает правильно.

На одном из серверов SQL Server 2005 при попытке открыть свойства БД через GUI видим:

Действительно, определить владельца БД не удается:

select owner_sid, suser_sname(owner_sid) from sys.databases where name='model'
owner_sid owner name
0x010500000000000515000000B92ACD62A473F62D825A8A49A3780000 NULL

Вероятно, это был доменный пользователь, которого больше нет в AD.
Изменить владельца процедурой sp_changedbowner в БД model нельзя:

use model; EXEC sp_changedbowner 'sa'

Msg 15109, Level 16, State 1, Line 1
Cannot change the owner of the master, model, tempdb or distribution database.

Можно поменять sid непосредственно в системной таблице, как описано здесь, но это, действительно, нерекомендуемый MS путь.

Так что воспользуемся тем, что при присоединении любой БД её владельцем становится текущий пользователь, и, запустив SQL Server с ключом /T3608, выполним из-под сессии пользователя sa:

EXEC master.dbo.sp_detach_db @dbname = N'model'
GO
CREATE DATABASE [model] ON
( FILENAME = N'E:\DATA\model.mdf' ),
( FILENAME = N'E:\DATA\modellog.ldf' )
FOR ATTACH
GO

Перезапустим SQL Server, убеждаемся:

select owner_sid, suser_sname(owner_sid) 'owner name' from sys.databases where name='model'
owner_sid owner name
0x01 sa

Если есть возможность, можно открыть порты для службы SQL Server Browser, перечисленные здесь.
Если нет, нужно создать алиас или просто подключаться, указывая порт в строке подключения:

где именованный инстанс INSTANCENAME работает по порту 1453.

Версия ОС: Windows Server 2008R2 EE x64
Версия SQL Server: SQL Server 2008R2 x64 SP1

Из-за неизвестной ошибки провайдера “Oracle provider for OLE DB” два раза подряд перезапустился сервис SQL Server, запись в логе приложений:

01:46:12 PM Information SERVERNAME.domain.a 1001 Windows Error Reporting N/A N/A Fault bucket , type 0 Event Name: APPCRASH Response: Not available Cab Id: 0 Problem signature: P1: sqlservr.exe P2: 2009.100.2500.0 P3: 4dfb6221 P4: StackHash_6d63 P5: 6.1.7601.17725 P6: 4ec4aa8e P7: c0000374 P8: 00000000000c40f2 P9: P10: Attached files: C:\Users\username\AppData\Local\Temp\WERC049.tmp.appcompat.txt C:\Users\username\AppData\Local\Temp\WERCB13.tmp.WERInternalMetadata.xml C:\Users\username\AppData\Local\Temp\WERDDCA.tmp.mdmp C:\Users\username\AppData\Local\Temp\WERE22E.tmp.WERDataCollectionFailure.txt These files may be available here: C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_sqlservr.exe_acc33c1fca791edc578ecac2be501126d4755535_cab_64a1e249 Analysis symbol: Rechecking for solution: 0 Report Id: 15cbe2fd-ae2a-11e1-a618-3c4a927b0a88 Report Status: 0
01:46:12 PM Error SERVERNAME.domain.a 19019 MSSQL$SQL1 Server N/A The MSSQL$SQL1 service terminated unexpectedly.

Причина перезагрузки SQL Server – это ошибка доступа (access violation AV) – повреждение кучи (heap corruption):

STACK_TEXT:
00000000`00000000 00000000`00000000 oraoledbutl10!Unknown+0x0
FAILURE_BUCKET_ID: ACTIONABLE_HEAP_CORRUPTION_heap_failure_block_not_busy_AFTER_CALL_c0000374_OraOLEDButl10.dll

Чтобы исключить подобное в будущем, убираем свойство “allow in process” провайдера Oracle, чтобы провайдер для линкованного сервера Oracle работал вне процесса SQL Server:

Далее, в соответствии с этой статьей, настраиваем доступ к MSDAINITIALIZE.

Теперь ошибка провайдера “Oracle provider for OLE DB” не повлечет за собой перезапуск службы SQL Server.

May 2011
M T W T F S S
« Apr   Jun »
 1
2345678
9101112131415
16171819202122
23242526272829
3031