这两天连续碰到同事问10.5对Oracle 12.2的支持问题,Esri的System Requirements里面明确10.5只支持Oracle 11.2.0.4和Oracle12.1.0.2.0两个版本。
美国给的答复是:10.5还不支持12.2,具体什么时候支持不清楚。
这两天搭建了一个linux机器,安装了Oracle 12.2,对其进行了测试。结果如下:
测试1:使用ArcGIS10.5创建企业级地理数据库,报如下错误
测试2:将已经创建好的版本是12.1.0.2.0的schema通过oracle的expdp和impdp工具迁移到新的12.2的库上,然后使用桌面进行连接,依然报上面的错误。
将测试2的后台执行的SQL抓出来,发现调用了如下的SQL语句。
PARSING IN CURSOR #140419854666944 len=21 dep=0 uid=107 oct=3 lid=107 tim=1917364232784 hv=708348750 ad='6a4f5400' sqlid='d6r1mk4p3j2uf'
SELECT USER FROM DUAL
END OF STMT
PARSE #140419854666944:c=1000,e=1221,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=1388734953,tim=1917364232783
EXEC #140419854666944:c=0,e=22,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1388734953,tim=1917364232917
WAIT #140419854666944: nam='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1917364233009
FETCH #140419854666944:c=0,e=15,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=1388734953,tim=1917364233077
STAT #140419854666944 id=1 cnt=1 pid=0 pos=1 obj=0 op='FAST DUAL (cr=0 pr=0 pw=0 str=1 time=2 us cost=2 size=0 card=1)'
WAIT #140419854666944: nam='SQL*Net message from client' ela= 323 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1917364233557
CLOSE #140419854666944:c=0,e=6,dep=0,type=0,tim=1917364233621
=====================
PARSING IN CURSOR #140419854666944 len=80 dep=0 uid=107 oct=47 lid=107 tim=1917364233759 hv=1948418075 ad='73b826c0' sqlid='746w6fdu2500v'
BEGIN /* ArcSDE plsql */ dbms_utility.db_version (:version,:compatibility); END;
END OF STMT
PARSE #140419854666944:c=0,e=82,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=1917364233758
BINDS #140419854666944:
发现只执行了两个SQL语句,第一个是获取用户名,第二是获取数据库的版本。从上面执行的SQL语句能判断出来,ArcGIS获取oracle的版本,发现是12.2,不在支持的范围内,因此退出。
测试3:
既然通过oracle的dbms_utility.db_version获取到的Oracle的版本信息,那是不是可以通过修改这个存储过程,强行让其返回12.1的信息。答案是可以的,具体过程不在此介绍,感兴趣的可以私聊。