SQL Server 2019创建Azure Blob CSV外部表遇JVM加载错误求助
解决创建Azure外部表时的JVM加载错误
问题描述
已将测试CSV文件上传至Azure存储Blob容器,按微软官方指引创建了DATABASE SCOPED CREDENTIAL、EXTERNAL DATA SOURCE,但创建EXTERNAL TABLE时出现如下错误:
Msg 105019, Level 16, State 1, Line 67 External file access failed due to internal error: 'Error occurred while accessing HDFS: An unexpected error has occurred while creating or attaching to JVM. Details: System.DllNotFoundException: Unable to load DLL 'jvm.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) at JNI.JavaVM.JNI_GetCreatedJavaVMs(IntPtr& pVM, Int32 jSize1, Int32& jSize2) at Microsoft.SqlServer.DataWarehouse.Hadoop.HadoopBridge.JavaBridge.LoadOrAttachJVM()'
已重装JDK但问题未解决。
解决方案
- 匹配JDK位数与SQL Server版本:确保安装的JDK位数和SQL Server一致(64位SQL必须用64位JDK),避免32位/64位混用导致无法加载
jvm.dll。 - 正确配置系统环境变量:
- 添加
JAVA_HOME环境变量,值为JDK的根目录(如C:\Program Files\Java\jdk1.8.0_381),不要指向bin子目录。 - 在
Path变量中添加%JAVA_HOME%\bin,并将其移至列表顶部,避免其他JVM版本干扰。 - 可选添加
CLASSPATH变量,值设为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。
- 添加
- 授予SQL Server服务账户JDK目录权限:找到JDK安装文件夹,右键进入「属性」-「安全」,添加SQL Server服务账户(通常为
NT SERVICE\MSSQLSERVER),赋予「读取和执行」权限。 - 重启SQL Server服务:修改环境变量和权限后,必须重启SQL Server服务,确保配置生效。
- 验证外部数据源配置:确认
EXTERNAL DATA SOURCE的TYPE为BLOB_STORAGE,LOCATION格式正确(https://<存储账户名>.blob.core.windows.net/<容器名>),且关联的DATABASE SCOPED CREDENTIAL凭据信息无误。
内容的提问来源于stack exchange,提问作者user3268139
相关产品推荐
相关产品推荐

