KB4577594 - KHẮC PHỤC: Thêm thư mục ngôn ngữ và phần mở rộng vào biến môi trường PATH trong SQL Server 2019

Áp dụng cho
SQL Server 2019 on Linux SQL Server 2019 on Windows

Triệu chứng

Khi bạn chạy phần mở rộng ngôn ngữ bên ngoài của bên thứ ba phụ thuộc vào một thư viện được chia sẻ khác, bạn có thể gặp phải một thông báo lỗi.

Lỗi không tìm thấy thư viện

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".

Giải pháp

Sự cố này đã được khắc phục trong bản cập nhật tích lũy sau đây dành cho SQL Server:

Giới thiệu về các bản cập nhật tích lũy cho SQL Server:

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất cho SQL Server:

Giải pháp thay thế

Đối với Windows:

Để khắc phục sự cố này, bạn nên thêm một trong hai cách rõ ràng:

  • đường dẫn đến các thư viện phụ thuộc nếu ZIP phần mở rộng ngôn ngữ không chứa thư viện phụ thuộc HOẶC
  • thư mục ngôn ngữ và phần mở rộng Nếu zip phần mở rộng ngôn ngữ còn chứa thư viện phụ thuộc ngoài phần mở rộng

vào biến môi trường PATH của hệ thống để có thể tìm thấy các thư viện phụ thuộc.

Ví dụ:

Kịch bản 1:

  1. Bạn có một phần mở rộng ngôn ngữ với thư viện phụ thuộc tại vị trí: C:\\Users\\admin\\Documents\\dependency.dll.
  2. language-extension.zip chỉ chứa languageExtension.dll.
  3. Sau đó, hãy đảm bảo đường dẫn đến phần phụ thuộc được thêm vào biến môi trường PATH của hệ thống. Ví dụ, C:\\Users\\admin\\Documents.

CREATE EXTERNAL LANGUAGE [mylanguage]

FROM (CONTENT = N'C:\\Users\\admin\\Documents\\language-extension.zip', FILE_NAME = 'languageExtension.dll')

GO

Kịch bản 2:

  1. Nếu language-extension.zip chứa cả languageExtension.dll mở rộng và thư viện phụ thuộc của nó - dependency.dll, trước tiên hãy tìm ID ngôn ngữ tiếp theo bắt đầu từ 65536 bằng cách chạy dạng xem danh mục sau đây trong cơ sở dữ liệu tương ứng và thêm 1 vào ID ngôn ngữ được cài đặt cao nhất lớn hơn 65536. Ví dụ: đối với cơ sở dữ liệu chính, "SELECT * FROM master.sys.external_languages".
  2. Tạo đường dẫn đến thư mục ngôn ngữ bằng cách thay thế tên phiên bản, database_id và next_language_id trong đường dẫn sau: C:\\Program Files\\Microsoft SQL Server\\MSSQL15. MSSQLSERVER\\MSSQL\\ExternalLanguages\\database_id<>\\id< ngôn> ngữ tiếp theo.
  3. Sau đó, tạo ngôn ngữ ngoài như sau:

CREATE EXTERNAL LANGUAGE [mylanguage]

FROM (CONTENT = N'C:\\Users\\admin\\Documents\\language-extension.zip', FILE_NAME = 'languageExtension.dll',

ENVIRONMENT_VARIABLES = N'{"PATH":"C:\\ProgramFiles\\Microsoft SQLServer\\MSSQL15. MSSQLSERVER\\MSSQL\\ExternalLanguages\\1\\65536"}');

GO

Đối với Linux:
      

Không có bản sửa lỗi nào và bạn phải luôn thêm ${ORIGIN} vào tùy chọn rpath của trình liên kết khi bạn biên dịch các phần mở rộng.

Ví dụ: set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath,'${ORIGIN}'")

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft dùng để mô tả các bản cập nhật phần mềm.