SQL Server Agent iş adımından çağrıldığında SSIS paketi çalışmıyor

Bu makale, bir SQL Server Agent iş adımından SSIS paketini çağırdığınızda oluşan sorunu çözmenize yardımcı olur.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 918760

Belirtiler

SQL Server Agent iş adımından bir Microsoft SQL Server Integration Services (SSIS) paketini çağırdığınızda, SSIS paketi çalışmaz. Ancak, SSIS paketini değiştirmezseniz, SQL Server Agent dışında başarıyla çalışır.

Çözüm

Bu sorunu gidermek için aşağıdaki yöntemlerden birini kullanın: En uygun yöntem ortama ve paketin başarısız olmasının nedenine bağlıdır. Paketin başarısız olmasının nedenleri şunlardır:

  • SQL Server Agent altında paketi çalıştırmak için kullanılan kullanıcı hesabı, özgün paket yazarından farklıdır.
  • Kullanıcı hesabı, bağlantı oluşturmak veya SSIS paketi dışındaki kaynaklara erişmek için gerekli izinlere sahip değildir.

Paket aşağıdaki senaryolarda çalışmayabilir:

  • Geçerli kullanıcı paketten gizli dizilerin şifresini çözemiyor. Geçerli hesap veya yürütme hesabı özgün paket yazarından farklıysa ve paketin ProtectionLevel özellik ayarı geçerli kullanıcının paketteki gizli dizilerin şifresini çözmesine izin vermiyorsa bu senaryo ortaya çıkabilir.
  • Geçerli kullanıcı gerekli izinlere sahip olmadığından tümleşik güvenlik kullanan bir SQL Server bağlantısı başarısız oluyor.
  • Geçerli kullanıcının bağlantı yöneticisinin eriştiği dosya paylaşımına yazmak için gerekli izinlere sahip olmaması nedeniyle dosya erişimi başarısız oluyor. Örneğin, bu senaryo oturum açma bilgisi ve parola kullanmayan metin günlüğü sağlayıcılarıyla ortaya çıkabilir. Bu senaryo, SSIS dosya sistemi görevi gibi dosya bağlantı yöneticisine bağlı herhangi bir görevle de gerçekleşebilir.
  • Kayıt defteri tabanlı SSIS paketi yapılandırması, kayıt defteri anahtarlarını kullanır HKEY_CURRENT_USER . HKEY_CURRENT_USER Kayıt defteri anahtarları kullanıcıya özeldir.
  • Görev veya bağlantı yöneticisi, geçerli kullanıcı hesabının doğru izinlere sahip olmasını gerektirir.

Sorunu çözmek için aşağıdaki yöntemleri kullanın:

  • Yöntem 1: SQL Server Agent proxy hesabı kullanın. bir SQL Server Agent proxy hesabı oluşturun. Bu proxy hesabı, SQL Server Agent işi paketi oluşturan hesap olarak veya gerekli izinlere sahip bir hesap olarak çalıştırmasına olanak tanıyan bir kimlik bilgisi kullanmalıdır.

    Bu yöntem gizli dizilerin şifresini çözmek için çalışır ve kullanıcı tarafından anahtar gereksinimlerini karşılar. Ancak, SSIS paketi kullanıcı anahtarları geçerli kullanıcıyı ve geçerli bilgisayarı içerdiğinden bu yöntem sınırlı başarıya sahip olabilir. Bu nedenle, paketi başka bir bilgisayara taşırsanız, iş adımı doğru proxy hesabını kullansa bile bu yöntem yine başarısız olabilir.

  • Yöntem 2: SSIS Paketi ProtectionLevel özelliğini ServerStorage olarak ayarlayın. SSIS Package ProtectionLevel özelliğini ServerStorage olarak değiştirin. Bu ayar paketi bir SQL Server veritabanında depolar ve SQL Server veritabanı rolleri aracılığıyla erişim denetimine izin verir.

  • Yöntem 3: SSIS Paketi ProtectionLevel özelliğini olarak EncryptSensitiveWithPasswordayarlayın. SSIS Paketi ProtectionLevel özelliğini olarak EncryptSensitiveWithPassworddeğiştirin. Bu ayar şifreleme için bir parola kullanır. Daha sonra SQL Server Agent iş adımı komut satırını bu parolayı içerecek şekilde değiştirebilirsiniz.

  • Yöntem 4: SSIS Paketi yapılandırma dosyalarını kullanın. Hassas bilgileri depolamak için SSIS Paketi yapılandırma dosyalarını kullanın ve ardından bu yapılandırma dosyalarını güvenli bir klasörde depolayın. Ardından, paketin ProtectionLevel şifrelenmemesi ve gizli dizileri pakete DontSaveSensitive kaydetmeye çalışmaması için özelliğini olarak değiştirebilirsiniz. SSIS paketini çalıştırdığınızda, gerekli bilgiler yapılandırma dosyasından yüklenir. Yapılandırma dosyalarının hassas bilgiler içeriyorsa yeterince korunduğundan emin olun.

  • Yöntem 5: Paket şablonu oluşturma. Uzun vadeli bir çözüm için, varsayılan ayardan farklı bir koruma düzeyi kullanan bir paket şablonu oluşturun. Bu sorun gelecekteki paketlerde oluşmaz.

Sorunu yeniden oluşturma adımları

  1. SQLServerSQLAgentUser grubunun parçası olmayan bir kullanıcı olarak oturum açın. Örneğin, yerel bir kullanıcı oluşturabilirsiniz.
  2. Bir SSIS paketi oluşturun ve bir ExecuteSQL görevi ekleyin. Aşağıdaki dizeyi kullanarak yerel msdb dosyasına ole db bağlantı yöneticisi kullanın: 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who".
  3. Başarıyla çalıştığından emin olmak için paketi çalıştırın.
  4. ProtectionLevel özelliği olarak EncryptSensitiveWithPasswordayarlanır.
  5. bir SQL Server Agent işi ve bir iş adımı oluşturun. Farklı Çalıştır listesinde, SQL Server Agent Hizmeti'ne tıklayarak iş adımını çalıştırın. SQL Server Agent İş Geçmişi'ndeki metinde aşağıdakine benzer bilgiler görüntülenir:

Paket gizli dizilerinin şifresini çözme

SSIS paket ProtectionLevel özelliği için varsayılan ayar şeklindedir EncryptSensitiveWithUserKey. Paket kaydedildiğinde, SSIS paketin yalnızca işaretlenen parolalar, kullanıcı adları ve bağlantı dizeleri gibi özellikleri sensitiveiçeren bölümlerini şifreler. Bu nedenle, paket yeniden yüklendiğinde, geçerli kullanıcının şifresi çözülecek özellikler için sensitive şifreleme gereksinimlerini karşılaması gerekir. Ancak, geçerli kullanıcının paketi yüklemek için şifreleme gereksinimlerini karşılaması gerekmez. Paketi bir SQL Server Agent iş adımı üzerinden çalıştırdığınızda, varsayılan hesap SQL Server Agent Hizmet hesabıdır. Bu varsayılan hesap büyük olasılıkla paket yazarından farklı bir kullanıcıdır. Bu nedenle, SQL Server Agent iş adımı iş adımını yükleyip çalıştırmaya başlayabilir, ancak bir bağlantıyı tamamlayamadığı için paket başarısız olur. Örneğin, paket OLE DB bağlantısını veya FTP bağlantısını tamamlayamaz. Bağlanması gereken kimlik bilgilerinin şifresini çözemediğinden paket başarısız oluyor.

Önemli

Her bilgisayarda hangi hesapların gerekli olduğunu ve kullanıldığını belirlemek için geliştirme sürecini ve ortamı göz önünde bulundurun. Özelliğin EncryptSensitiveWithUserKey ayarı ProtectionLevel güçlü bir ayardır. İlk başta dağıtım komplikasyonlarına neden olduğundan bu ayar indirime alınmamalıdır. Uygun hesapta oturum açtığınızda paketleri şifreleyebilirsiniz. .cmd dosyasını ve SQL Server Agent komut alt sistemini kullanarak koruma düzeylerini değiştirmek için Dtutil.exe SSIS komut istemi yardımcı programını da kullanabilirsiniz. Örneğin, bu adımları izleyin. Dtutil.exe yardımcı programını toplu iş dosyalarında ve döngülerde kullanabileceğiniz için, aynı anda birkaç paket için bu adımları izleyebilirsiniz.

  1. Parola kullanarak şifrelemek istediğiniz paketi değiştirin.

  2. özelliğini EncryptSensitiveWithUserKeyolarak değiştirmek ProtectionLevel için bir İşletim Sistemi (cmd Exec) SQL Server Agent iş adımı aracılığıyla Dtutil.exe yardımcı programını kullanın. Bu işlem, parolayı kullanarak paketin şifresini çözmeyi ve ardından paketi yeniden şifrelemeyi içerir. Paketi şifrelemek için kullanılan kullanıcı anahtarı, Farklı Çalıştır listesindeki SQL Server Agent iş adımı ayarıdır.

    Not

    Anahtar kullanıcı adını ve bilgisayar adını içerdiğinden paketleri başka bir bilgisayara taşımanın etkisi sınırlı olabilir.

SSIS paketi hatası hakkında ayrıntılı hata bilgilerine sahip olduğunuzdan emin olun

SQL Server Agent İş Geçmişi'ndeki sınırlı ayrıntılara güvenmek yerine, SSIS paketi hatası hakkında hata bilgilerine sahip olduğunuzdan emin olmak için SSIS günlüğünü kullanabilirsiniz. Paketi, SSIS alt sistemi komutu yerine exec alt sistemi komutunu kullanarak da çalıştırabilirsiniz.

SSIS günlüğü hakkında

SSIS günlüğü ve günlük sağlayıcıları, paket yürütme ve hatalarla ilgili ayrıntıları yakalamanıza olanak sağlar. Varsayılan olarak, paket bilgileri günlüğe kaydetmez. Paketi bilgileri günlüğe kaydedecek şekilde yapılandırmanız gerekir. Paketi bilgileri günlüğe kaydedecek şekilde yapılandırdığınızda, aşağıdakine benzer ayrıntılı bilgiler görüntülenir. Bu durumda, bunun bir izin sorunu olduğunu anlarsınız:

OnError,DOMAINNAME,DOMAINNAME\USERNAME,FTP Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM,4/28/2006 1:51:59 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager".
OnError,DOMAINNAME,DOMAINNAME\USERNAME,Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00 PM,4/28/2006 4:07:00 PM,-1073573396,0x,Failed to acquire connection "user01.msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.

exec alt sistemi komutu ve çıktı bilgileri hakkında

exec alt sistemi komut yaklaşımını kullanarak, Dtexec.exe SSIS komut satırı yürütülebilir dosyasını çağırmak için SSIS komut satırına ayrıntılı konsol günlüğü anahtarları eklersiniz. Ayrıca, çıkış dosyasının Gelişmiş iş özelliğini kullanırsınız. Günlük bilgilerini bir dosyaya veya SQL Server Agent İş Geçmişi'ne yeniden yönlendirmek için Geçmişe Adım Çıkışı Ekle seçeneğini de kullanabilirsiniz.

Aşağıda bir komut satırı örneği verilmiştir:

 dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT

Konsol günlüğü aşağıdakine benzer ayrıntıları döndürür:

Error: 2006-04-27 18:13:34.76 Code: 0xC0202009 Source: AgentTesting Connection manager "(local).msdb" Description: An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'DOMAINNAME\username'.". End Error
Error: 2006-04-28 13:51:59.19 Code: 0xC0016016 Source: Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available. End Error
Log: Name: OnError Computer: COMPUTERNAME Operator: DOMAINNAME\username Source Name: Execute SQL Task Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762} Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8} Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection. Start Time: 2006-04-27 18:13:34 End Time: 2006-04-27 18:13:34 End Log

Başvurular

Ne yazık ki, kullanıcılar varsayılan aracı işi adımı ayarlarının onları bu duruma getirdiğinin farkında değildir. SQL Server Agent proxy'ler ve SSIS hakkında daha fazla bilgi için SQL Server 2005 Books Online'da aşağıdaki konulara bakın:

  • SQL Server Agent'da paket yürütmeyi zamanlama
  • SQL Server Agent proxy'leri oluşturma