ฉันจะแก้ไขข้อผิดพลาด SSIS Excel Connection Manager 0xC0209303 ได้อย่างไร


9

ฉันได้สร้างแพ็คเกจ SSIS ที่นำเข้าไฟล์ excel ลงในตาราง SQL Server

แพคเกจ SSIS ทำงานโดยไม่มีปัญหาใด ๆ เมื่อฉันเรียกใช้ภายในเครื่องของฉัน แต่เมื่อฉันเรียกใช้บนเซิร์ฟเวอร์ที่มีการกำหนดแพคเกจฉันได้รับข้อผิดพลาดด้านล่าง (จากไฟล์ข้อความที่ฉันส่งออกข้อผิดพลาดไป

หลังจากทำการวิจัยคำแนะนำเดียวที่ฉันหาได้คือการตั้งค่าคุณสมบัติ Run64BitRuntime เป็นเท็จซึ่งฉันทำ แต่ก็ยังไม่มีโชค ฉันสงสัยว่านี่คือสิ่งที่ทำให้เกิดข้อผิดพลาดของฉัน แต่เนื่องจากข้อผิดพลาดไม่ได้ระบุสิ่งใดที่เกี่ยวข้องกับ 64 บิต (เช่นกรณีในบทความที่ฉันพบ)

ฉันคิดด้วยว่าอาจเป็นเพราะเซิร์ฟเวอร์ไม่มีไดรเวอร์ Excel ที่เหมาะสม แต่ฉันไม่คิดว่าเป็นเช่นนั้นเพราะโดยปกติแล้วข้อความแสดงข้อผิดพลาดจะพูดบางอย่างเกี่ยวกับไดรเวอร์ที่ไม่ได้ลงทะเบียน

ขณะนี้ฉันไม่มีสิทธิ์เข้าถึงรีโมตในเซิร์ฟเวอร์ ฉันสามารถอัพโหลดแพคเกจไปยังโฟลเดอร์และจากนั้นแอปพลิเคชันจะทำงานดังนั้นข้อความแสดงข้อผิดพลาดเดียวที่ฉันเห็นคือสิ่งที่อยู่ในบันทึกข้อผิดพลาดข้อความที่ฉันสร้างขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

รหัสข้อผิดพลาด DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER การเรียกวิธีการ AcquireConnection ไปยังตัวจัดการการเชื่อมต่อ "Envision" ล้มเหลวด้วยรหัสข้อผิดพลาด 0xC0209303 อาจมีข้อความแสดงข้อผิดพลาดก่อนหน้านี้พร้อมข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่การเรียกใช้เมธอด AcquireConnection ล้มเหลว

"Envision" เป็นชื่อของตัวจัดการการเชื่อมต่อ excel ของฉัน

ฉันเติมเส้นทางแฟ้ม Excel และสตริงการเชื่อมต่อโดยใช้นิพจน์

นิพจน์สตริงการเชื่อมต่อมีลักษณะดังนี้:

"Provider = Microsoft.ACE.OLEDB.12.0; แหล่งข้อมูล =" + @ [ผู้ใช้ :: SourceFilePath] + "; คุณสมบัติเพิ่มเติม = \" เอ็กเซล EXCEL 12.0 XML; HDR = YES \ ";"

SSIS Pacakge ดำเนินการโดยชื่อผู้ใช้ / บัญชี windows ฉันคิดว่าอาจเป็นบัญชีบริการเว็บ (BDS_sprtIIS)

ใครบ้างมีวิธีแก้ปัญหาหรือข้อเสนอแนะเกี่ยวกับวิธีการแก้ไขปัญหาของแพคเกจนี้ทำงานบนเครื่องท้องถิ่นของฉันเท่านั้น แต่ไม่ได้อยู่บนเซิร์ฟเวอร์จริงที่แพคเกจจะถูกปรับใช้?

ฉันพบคำตอบด้านล่างในฟอรัมอื่นอาจเป็นสาเหตุของปัญหาได้หรือไม่ พวกเขาโดยทั่วไปบอกว่าตัวจัดการการเชื่อมต่อของ Excel พยายามเข้าถึงโฟลเดอร์ temp ของผู้ใช้ด้วยเหตุผลบางประการและหากไม่สามารถเข้าถึงโฟลเดอร์นั้นได้ก็จะล้มเหลว:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- ผู้จัดการล้มเหลวด้วย? ฟอรั่ม = sqlintegrationservices

ฉันสังเกตเห็นด้วยเช่นกันว่าไดรเวอร์ Microsoft.JET.OLEDB.4.0 จะพยายามอ่านไดเรกทอรีชั่วคราวภายใต้โปรไฟล์ของผู้ใช้ที่เข้าสู่ระบบ

.

... เรารันตัวแทน SQL ของเราโดยใช้บัญชีโดเมนระดับล่างและเรียกใช้แพ็คเกจ SSIS ของเราโดยใช้บัญชีพร็อกซี คุณถูกต้องตามที่ Procmon ยืนยันสำหรับฉันเช่นกัน ฉันให้สิทธิ์บัญชีพร็อกซีในไดเรกทอรีชั่วคราวของโปรไฟล์ (C: \ Documents และ Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) และทำงานได้!

ฉันไม่ได้ใช้งานบัญชีเซิร์ฟเวอร์ SQL หรือบัญชีพร็อกซี แพคเกจจะดำเนินการโดยบัญชี windows มักผ่านสคริปต์บรรทัดคำสั่ง

บัญชี windows มีการเข้าถึงไฟล์ แต่ฉันไม่แน่ใจว่ามันมีสิทธิ์เข้าถึงโฟลเดอร์ "TEMP" (ซึ่งฉันไม่เคยอ้างอิงในแพ็คเกจเลยฉันไม่รู้ว่าทำไมต้องเข้าถึงโฟลเดอร์นั้น) ...

คำตอบ:


8

มีปัญหา 2 ข้อที่ป้องกันไม่ให้แพคเกจทำงานบนเซิร์ฟเวอร์ ด้านล่างนี้เป็นปัญหา 2 ข้อและแนวทางแก้ไขที่ฉันพบ

  1. แพคเกจถูกดำเนินการโดยแอปพลิเคชันที่ใช้ยูทิลิตี DTexec 64- บิตโดยค่าเริ่มต้น แต่แพคเกจจะต้องรันโดยใช้ยูทิลิตี้รุ่น 32 บิตเพื่อให้สามารถเข้าถึงไฟล์ Excel ได้อย่างถูกต้องผ่านตัวจัดการการเชื่อมต่อของ Excel

    ฉันสร้างแพ็คเกจ "ห่อหุ้ม" SSIS ที่ใช้งานกระบวนการดำเนินการที่เรียกใช้ยูทิลิตี้ DTExec 32 บิต (แทน 64 บิต) และส่งคำสั่งเพื่อเปิดแพ็คเกจเดิม

    ดำเนินการกระบวนการทำงาน

  2. ฉันยังต้องติดตั้งMicrosoft Access Database Engine 2010 Redistributableรุ่น 32 บิตอีกด้วย

อ่านเพิ่มเติม:

Microsoft.ACE.OLEDB.12.0 ไม่ได้ลงทะเบียน (Stack Overflow)


2

การติดตั้ง Access Engine แบบ 32 บิตและการทำงานในโหมด 32 บิตนั้นเหมาะกับฉัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.