MIM 2016 Service and Portal Kurulumundaki Bug

Samet Kara

Bu makalede MIM 2016 kurulumunda bulduğum bir bugdan bahsetmek istiyorum. MIM 2016 SP2 sisteminin Service and Portal kurulumu sırasında sıra dışı bir hata aldım ve maalesef ekrana basılan hata açıklayıcı bir hata değildi. Hata verdikten sonra ekranda "OK" tuşuna basınca RollBack işlemi başlatılıyor ve sistem kurulumu tamamlanamıyordu. Kurulum ile ilgili günlükleri incelediğimde aşağıda belirttiğim hatalar ile karşılaştım.

MSI (s) (D8:B8) [12:25:37:638]: Executing op: CustomActionSchedule(Action=UpgradeDatabase,ActionType=1042,Source=D:\Program Files\Microsoft Forefront Identity Manager\2010\Service\Microsoft.IdentityManagement.DatabaseUpgrade.exe,Target=/ConnectionString:"Data Source=SQLSERVER;Initial Catalog=MIMService;Integrated Security=SSPI;Pooling=true;Connection Timeout=225" /FimServiceAccountName:"contoso\MIMService" /FimServiceDatabaseName:"MIMService" keepSQLjobs:"false",)

CustomAction UpgradeDatabase returned actual error code -2 (note this may not be 100% accurate if translation happened inside sandbox)

MSI (s) (D8:B8) [12:25:56:454]: Note: 1: 1722 2: UpgradeDatabase 3: D:\Program Files\Microsoft Forefront Identity Manager\2010\Service\Microsoft.IdentityManagement.DatabaseUpgrade.exe 4: /ConnectionString:"Data Source=SQLSERVER;Initial Catalog=MIMService;Integrated Security=SSPI;Pooling=true;Connection Timeout=225" /FimServiceAccountName:"contoso\MIMService" /FimServiceDatabaseName:"MIMService" keepSQLjobs:"false"

Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action UpgradeDatabase, location: D:\Program Files\Microsoft Forefront Identity Manager\2010\Service\Microsoft.IdentityManagement.DatabaseUpgrade.exe, command: /ConnectionString:"Data Source=SQLSERVER;Initial Catalog=MIMService;Integrated Security=SSPI;Pooling=true;Connection Timeout=225" /FimServiceAccountName:"contoso\MIMService" /FimServiceDatabaseName:"MIMService" keepSQLjobs:"false"

MSI (s) (D8:B8) [12:25:59:829]: Product: Microsoft Identity Manager Service and Portal -- Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action UpgradeDatabase, location: D:\Program Files\Microsoft Forefront Identity Manager\2010\Service\Microsoft.IdentityManagement.DatabaseUpgrade.exe, command: /ConnectionString:"Data Source=SQLSERVER;Initial Catalog=MIMService;Integrated Security=SSPI;Pooling=true;Connection Timeout=225" /FimServiceAccountName:"contoso\MIMService" /FimServiceDatabaseName:"MIMService" keepSQLjobs:"false"

Ancak bu günlük bilgileri aldığım hata mesajından daha fazla bilgi içermesine rağmen hala sorunun neden kaynaklandığını belirtmiyordu. Daha sonra Event Viewer üzerinden kayıtları inceledim.

Kurulum günlüğünde karşılaştığım hatanın aynısı Event Viewerda da kendisini gösterdi.

Bu olayın kaydının altında yer alan olay kaydında ise daha fazla açıklama içerebileceğini düşündüğüm bir tracelog dosyası işaret edilmekteydi.

İlgili dosyayı incelediğimde aşağıdaki gibi bir kayıt gördüm.

Microsoft.ResourceManagement Verbose: 0 : Out-of-box object import : Completed processing configuration change ConfigurationChange0004.
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Out-of-box object import : Started processing configuration change ConfigurationChange0006a.
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Out-of-box object import : Started processing pre object import file NoOperation.sql.
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Execute SQL : The following sql statement failed.
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Execute SQL : The transaction failed with the following errors System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.SqlClient.SqlConnection.GetOpenConnection()
at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName)
at Microsoft.IdentityManagement.DatabaseUpgrade.Program.TransactionFactory.CreateTransaction()
at Microsoft.IdentityManagement.DatabaseUpgrade.Program.ExecuteSqlScript(SqlConnection connection, S
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Error: 3 : Out-of-box object import : Errors encountered in pre-process. The error message: The sql transaction running the script NoOperation.sql failed.
Exception: System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.SqlClient.SqlConnection.GetOpenConnection()
at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName)
at Microsoft.IdentityManagement.DatabaseUpgrade.Program.TransactionFactory.CreateTransaction()
at Microsoft.IdentityManagement.DatabaseUpgrade.Program.ExecuteSqlScript(SqlConnection connection, String sqlFile, Boolean embeddedAsResource, Boolean hasPlaceholders, Boolean continueOnError)
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Database upgrade : Out-of-box object upgrade completed.
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Verbose: 0 : Database upgrade : Out-of-box object upgrade complete with errors. The sql transaction running the script NoOperation.sql failed.
Exception: System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.SqlClient.SqlConnection.GetOpenConnection()
at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName)
at Microsoft.IdentityManagement.DatabaseUpgrade.Program.TransactionFactory.CreateTransaction()
at Microsoft.Identit
DateTime=2020-05-01T09:25:56.4230833Z
Microsoft.ResourceManagement Error: 3 : Database upgrade : Encountered errors when upgrading the out-of-box objects.
DateTime=2020-05-01T09:25:56.4230833Z

Şuana kadar anlayabildiğim tek şey kurulum sırasında "Database Upgrade" isimli işlem gerçekleştirilirken bir problem yaşandığı şeklindeydi. Ben de bu konuyu araştırmaya koyuldum ve hata ile karşılaşan exe dosyasını ve bu dosya ile ilişik config dosyasını buldum. Belki bu dosyaları incelemenin bir faydası olabilir diye düşündüm.

Config dosyasınıı açıp içerisinde yukarıda tracelog dosyasında hata alınan adım olarak belirtilen "ConfigurationChange0006a" ifadesini arattım.

<ConfigurationChange Id="ConfigurationChange0006a" File="ServicePartitionNameAttribute.xml" EmbeddedAsResource="true" PreSql="NoOperation.sql" PostSql="ServicePartitionNameReconciled.sql" SourceVersion="6" />

Bu sonuç bana bir bilgi vermemişti. "ServicePartitionNameAttribute.xml" dosyasını da hiçbir yerde bulamadım ve bir çıkmaza girdim.

Ancak şunu anlamıştım SQL üzerinde veri tabanı oluştururken bir sıkıntı yoktu ancak onu güncellemeye çalışırken bir hata alıyordu. Bu durumda SQL Server Profiler aracını kullanarak kurulumu incelemeye başladım. SQL Server Profiler uygulamasını açtım, gerekli filtreleri girdim ve kurulumu yeniden başlattım. Kurulumda hata aldığım an SQL Server Profiler uygulamasına dönüp son satırlara baktım ve [setup].[EnableServiceBroker] isimli bir StoredProcedure çalıştırıldığını ve hata alındığını gördüm. Bu StoredProcedure'e göz attığımda hatanın nedeni anladım.

USE MIMService
GO

/****** Object: StoredProcedure [setup].[EnableServiceBroker] Script Date: 5/1/2020 3:02:28 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
--********************************************************
--* *
--* Copyright (C) Microsoft. All rights reserved. *
--* *
--********************************************************

ALTER PROCEDURE [setup].[EnableServiceBroker]
AS
BEGIN
 SET NOCOUNT ON;
 ALTER DATABASE [FIMService] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;
 ALTER DATABASE [FIMService] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
 ALTER DATABASE [FIMService] SET ENABLE_BROKER;
 ALTER DATABASE [FIMService] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
 ALTER AUTHORIZATION ON DATABASE::[FIMService] TO [SA];
END

Kurulum sırasında aşağıdaki ekranda bizlere veri tabanının ismini değiştirebilmemiz için bir alan verilmiş. Bu alanı aşağıdaki ekran görüntüsünde belirttim.

Ancak bir bu alana FIMService dışında bir isim yazarsak bu Stored Prosedure doğru çalışmamaktadır.

Yine de daha önce pek çok farklı MIM kurulumu yaptım ve her defasında bu veri tabanının adını değiştiririm. Neden ilk defa bu şekilde bir hata aldım diye kontrol ettiğimdeyse Daha önceki MIM denemesinden FIMService diye bir veri tabanı oluşmuş ve bu veri tabanı kullanılmadığı için "Offline" durumuna getirilmiş. Daha önceki kurulumlarımda bu Stored Prosedure sadece veri tabanını bulamadım diye hata verirken bu kurulumda ilgili veri tabanı Offline olduğu için bu sıkıntıyı çıkartmış.

Bunu fark ettikten sonra bu şekilde başka hatalar yapılmış olabileceğini düşündüm ve aşağıdaki SQL cümleciğini yazdım.


SELECT DISTINCT
 s.name AS Schema_Name,
 o.name AS Object_Name,
 o.type_desc
 FROM sys.sql_modules m
 INNER JOIN
 sys.objects o
 ON m.object_id = o.object_id
 INNER JOIN sys.schemas s
 ON s.schema_id = o.schema_id
 WHERE m.definition Like '%FIMService%';

Bu cümlecik ile içerisinde FIMService terimi geçen bütün StoredProcedureların listesini oluşturdum.

Çıkan 15 sonucu da incelediğimde genellikle yorum satırlarında FIMService teriminin kullanıldığı, birkaç Stored Prosedure içerisinde ise bu terimin FIMServiceTruncateUser gibi kullanıcı isimlerinde ya da @ile başlayan değişkenlerde kullanıldığını fark ettim. Bu durumda sorun çıkartabilecek olan tek Stored Prosedure'ın [setup].[EnableServiceBroker] olduğunu görmüş oldum.

Sonuç olarak her ne kadar bizlere Veri tabanı adını değiştirebilmemiz için bir alan verilmiş olsa dahi bu Stored Prosedure'dan dolayı ilgili veri tabanının adını değiştirmemenizi önermekteyim.

Last updated