2011-12-27 50 views
5

Chúng tôi có một chương trình C# được lên kế hoạch chạy trong Task Scheduler trên Windows Server 2003, được thiết kế để xóa các tệp cũ trong một thư mục dựa trên thông tin được rút ra từ nhiều cơ sở dữ liệu Oracle. Tôi có thể thực thi ứng dụng theo cách thủ công và mọi thứ hoạt động tốt - được đăng nhập hoặc là bản thân mình với quyền quản trị hoặc đăng nhập với tư cách người dùng nhiệm vụ được gán có quyền Người dùng.Lỗi Oracle trong Task Scheduler

Khi người sử dụng nhiệm vụ được đăng nhập tắt máy, tuy nhiên, việc áp dụng không thành công trên mỗi cơ sở dữ liệu với một trong hai lỗi: hoặc

ORA-12.504: TNS: listener đã không được trao SERVICE_NAME trong CONNECT_DATA

hoặc

ORA-12154: TNS: không thể giải quyết các kết nối nhận diện quy định.

Tất cả các cơ sở dữ liệu này đang sử dụng chuỗi kết nối (được lấy từ một chuỗi khác, SQL Server, cơ sở dữ liệu), như tôi đã nói trước đây, kết nối và chạy tốt khi vận hành theo cách thủ công. Tôi đã được trên tất cả các trang web tìm kiếm lời khuyên mà có thể áp dụng cho trường hợp này và đã không đưa ra một câu trả lời dứt khoát.

Có ai đọc tin nhắn này có thể biết câu trả lời cho vấn đề này không? Mọi ý kiến ​​góp ý đều được chào đón.

+0

Bạn đang sử dụng phương pháp nào để kết nối với DBDB của Oracle? OLE DB? ADO.NET? ODBC? – Yahia

+0

Xin lỗi, chúng tôi đang sử dụng OLE DB. –

+0

Task Scheduler cung cấp một môi trường thời gian chạy mà không phải là một "máy tính để bàn đầy đủ" và OLE DB cần một môi trường đặc biệt như vậy. liên quan đến quyền ... để làm cho nó làm việc sử dụng ADO.NET mà làm việc tốt trong trường hợp đó ... – Yahia

Trả lời

2

Tác vụ được lập lịch của bạn là gì? Một trong những người dùng bạn đã thử nghiệm hoặc một tài khoản khác?

Bất kể, nó không có vẻ giống như vấn đề quyền, nhiều như biến môi trường ORACLE_HOME không được đặt. (Có vẻ như chương trình của bạn có thể đang cố gắng kết nối thông qua tệp tnsnames.ora không thể tìm thấy.) Bạn có thể cần phải có tác vụ được lên lịch trước tiên khởi chạy tệp lô đặt môi trường, sau đó tiếp tục gọi chương trình C# của bạn.

+0

Nếu bạn đang chạy điều này bằng tay .. nó làm cho tôi tự hỏi nếu một quá trình batchfile nếu nó chạy từ một loạt quá trình có thể có các tham số dòng lệnh bị sai lệch, hoặc các biến môi trường không được thiết lập hoặc lưu trữ đúng cách thông qua việc thực thi quy trình lô. chạy thủ công, bạn sẽ nghĩ rằng sẽ mang lại kết quả tương tự .. kiểm tra tất cả các phụ thuộc tập tin liên quan đến Task Scheduled đó .. nếu nó trỏ đến DB sai hoặc Server trong batchfile lưu trữ .. ?? Có lẽ đó là một chuỗi kết nối trỏ đến một máy chủ thử nghiệm hoặc một hiện không tồn tại ... chỉ cần Q & A – MethodMan

+0

Đó cũng là ấn tượng đầu tiên của tôi, nhưng không có tệp TNSNAMES.ORA trong hỗn hợp - tất cả được thực hiện thông qua các chuỗi kết nối.Đây là một ví dụ: DRIVER = {Oracle trong Orahome}, DBQ = VPDEV1.WORLD; UID = web_app; PWD = web_app; –

+0

@MikePreston Điều đó kết nối các chuỗi cần hoặc là một TNSNAMES.ORA hoặc một ONAMES-Server để làm việc - nếu không nó không thể giải quyết 'VPDEV1.WORLD'! – Yahia

2

Tôi gặp sự cố tương tự nhưng với một số ứng dụng java. Điều tương tự cũng xảy ra - thực thi tác vụ thủ công là tốt, nhưng việc thực hiện tự động luôn thất bại (cùng một tài khoản!).

Kiểm tra với quản trị viên của bạn (hoặc có thể bạn tự làm) và đặt ứng dụng C# của bạn sẽ được thực thi bởi tài khoản quản trị (chỉ kiểm tra!) Hoặc xem liệu có bất kỳ nhiệm vụ nào khác được lên lịch và thẩm vấn chúng không tài khoản họ sử dụng và cách thiết lập tài khoản. Tôi nhớ rằng chúng tôi (I + admin) đã phải thử nghiệm một chút, nhưng cuối cùng anh ấy đã tạo một tài khoản đặc quyền mới (một bản sao của một số tài khoản hiện có khác) để thực hiện tác vụ được lập biểu.

Các vấn đề liên quan