ฉันได้สร้างแพ็คเกจ 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 ของผู้ใช้ด้วยเหตุผลบางประการและหากไม่สามารถเข้าถึงโฟลเดอร์นั้นได้ก็จะล้มเหลว:
ฉันสังเกตเห็นด้วยเช่นกันว่าไดรเวอร์ Microsoft.JET.OLEDB.4.0 จะพยายามอ่านไดเรกทอรีชั่วคราวภายใต้โปรไฟล์ของผู้ใช้ที่เข้าสู่ระบบ
.
... เรารันตัวแทน SQL ของเราโดยใช้บัญชีโดเมนระดับล่างและเรียกใช้แพ็คเกจ SSIS ของเราโดยใช้บัญชีพร็อกซี คุณถูกต้องตามที่ Procmon ยืนยันสำหรับฉันเช่นกัน ฉันให้สิทธิ์บัญชีพร็อกซีในไดเรกทอรีชั่วคราวของโปรไฟล์ (C: \ Documents และ Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) และทำงานได้!
ฉันไม่ได้ใช้งานบัญชีเซิร์ฟเวอร์ SQL หรือบัญชีพร็อกซี แพคเกจจะดำเนินการโดยบัญชี windows มักผ่านสคริปต์บรรทัดคำสั่ง
บัญชี windows มีการเข้าถึงไฟล์ แต่ฉันไม่แน่ใจว่ามันมีสิทธิ์เข้าถึงโฟลเดอร์ "TEMP" (ซึ่งฉันไม่เคยอ้างอิงในแพ็คเกจเลยฉันไม่รู้ว่าทำไมต้องเข้าถึงโฟลเดอร์นั้น) ...