Oracle12cR1安装步骤及直接连接arcgis10.2.X
前言
由于项目需求,系统框架和arcgis是比较老的版本,以前oracle是11g 现改为12c版本。所以遇到一系列问题,但是项目需求没有办法,只能一步一步解决。如果可以,尽量使用数据库。arcgis、api等同版本。 本文档为Oracle12cR1数据库直连arcgis10.2.2,arcgis官网说明:arcgis10.2.x适用于oracle12cR以下版本。oracle11g的bug而且只能安装server 在2008年以下版本的操作系统中,优先选择12cR1了.但数据库客户端的安装选择是orcacle12cR2 32位 64位 oracle12cR1 静默安装32个版本。(注:三个客户端)
示例安装说明
配置数据库服务器 处理器:4核 内存:256GB 系统:Windows server2019
在下面的截图中安装包就足够了。如果是其他低版本的系统,可能需要更多的补丁。这里没有额外的补丁,所以不清楚不重复。 Oracle12cR1安装包可在官网下载
开始安装
解压压缩包后,点击双击setup.exe 1.会跳出一个操作窗口,这是检查监视器的参数,检查后会自动跳,所以不要移动它,等待跳下一个窗口。
2.下面的选项不需要检查。你想接受吗?oracle没有必要更新相关的东西。点击下一步跳出窗口,直接点击是。
3.软件更新-点击下一步
4.安装选项-点击创建和配置数据库 5.系统类-选择服务端 6.安装类型-点击高级安装 软件语言-直接默认点击下一步
安装过程中会遇到的问题:
查了一下百度,oracle12cR1在安装的时候遇到这个问题的概率还是很大的,也有很多解决办法,以下写一种,这个相对来说算是万能的,也是网上查阅中用的最多最管用的了
控制面板>所有控制面板项>管理工具>计算机管理>系统工具>共享文件夹>共享右键单击“共享”>新建共享>,创建名为C$的c盘共享文件夹
验证安装
*安装完以后为了不必要的重复性工作,我们最好还是多验证几次数据库的安装是否真的正确后再继续进行下一步。 1、我们先用服务器cmd窗口连接 sqlplus 看一下是否可以连接成功 2、然后我们用自己的本机电脑的plsql工具连接一下(前提我们本机电脑上有,如果全部都是全新环境就没必要先在自己电脑上安装plsql工具了,我们的目的只是为了验证一下)。 一般来说在服务器上连接成功就是没有问题了,第2步是为了双重保险算是。
安装客户端
客户端安装在arcgis server的那台机器上面 本例中arcgis desktop和server是安装在了同一台机器上面,所以32位和64位的客户端都要安装。 Arcgis desktop:10.2.2 Arcgis server:10.2.2 Oracle12cR2:32位+64位(程序安装) Oracle12cR1:32位(静默安装)
第一步、安装好arcgis destop和server(这里不做赘述) 第二步、Oracle12cR2客户端的32位和64位。(安装过程很简单,大多都是直接点下一步,安装时选择“管理员安装”,还有路径选择的时候修改最后数字) 小提示:desktop读取的客户端位32位,server读取64位。 所以这里有一个要注意的地方是我们的desktop和server是安装在同一台机器的,如果是不同机器我们习惯性的在环境变量中把32位放在前面。这里如果我们再把32位放在前面会发现我们无法注册数据源了。所以再这种情况下,我们需要把64位放在前面来读取。 第三步、Oracle12cR1 的32位静默安装 解压安装包以后配置环境变量就可以了,注意环境变量的地址和解压的路径要一样 注意:为了今后的管理和分辨,最好把文件夹解压到安装的orcl client同一个路径下,例如我们已经生成过12cR2的客户端了,那么我们可以在同个路径下创建一个12cR1的client路径。后期会很清晰明了和方便管理。忌随意解压放置!!!忌随意解压放置!!!忌随意解压放置!!! 增加环境变量: path环境变量追加 ;D:\oracle_instantclient-basic-win32-10.2.0.4; ORACLE_HOME=D:\oracle_instantclient-basic-win32-10.2.0.4 TNS_ADMIN=D:\oracle_instantclient-basic-win32-10.2.0.4 NLS_LANG=AMERICAN_AMERICA.ZHS16GB
Catalog用映射名连接
以上安装好以后先用catalog进行连接验证(ip方式),如果确认连接+注册数据源+发布服务都没有问题后。我们再继续进行下一步,用映射名方式进行连接,这个的好处就在于,如果我们的数据库服务器换ip了,那么我们也不需要重新发服务,只需要重新配置一下就可以了。 在“开始”里面找到oracle的安装目录然后找到net manager添加服务命名
搬运机器导致的错误:
1、数据库服务器监听问题
问题:服务器搬运后,没有修改任何东西,但是发现数据库无法连接了,报错无法读取到监听位置。我们首先检查网络发现并没有问题,然后检查数据库服务器本身是不是出现了问题,结果并没有报错,在重新配置了监听以后还是出现了同样的问题,然后打开net manager把服务命名、监听全部删除重启(删除前先文件备份),重启后重新配置服务命名和监听。然后就好了。很奇怪,但就是这样。不确定是不是每次搬运机器都会出现还是几率性事件。所以记录一下。
2、数据库重新恢复后缺少函数
问题:数据恢复使用的是在服务器上用dmp导入恢复的方式 但是恢复后发现系统中有两个页面显示404,首先我们先找数据库的原因,**tomact中报错缺少WM_CONCAT函数。**百度后用下面的方法2解决。解决办法如下
报错信息如下:
经了解,wm_contact(column)函数从oracle10g开始使用,然而12C以上版本摒弃了wm_concat函数,导致不能识别"WM_CONCAT"函数。大家都知道,WM_CONCAT"可以实现oracle中字段的合并,wm_concat(列名)函数,能把指定的列的值,按照group by 中指定的分隔方法,用逗号拼接起来。通常用法如下例:
#通用用法 select id,wm_concat(test) result from test group by id; #使用时记得用to_char()封装下 select id,to_char(wm_concat(test)) result from test group by id;
至于为何oracle在12c的版本中抛弃不用wm_contact(column)? 个人这里大致推测下:应该和函数执行效率低有关,因为用过的朋友有切身体会,万行的查询合并,执行时间较长。另,wm_contact英文描述为undocumented,意味着随时可能发生变更;10.2.0.5上,其返回类型从varchar2变为了clob,12c后续版本,直接就取消了此函数。用到此函数的数据库发生大版本升级,因升级后如不注意,应用在进行功能性测试时,肯定出问题。
本次升级,11g中版本对应的应用程序中使用了wm_contact该函数,升级后的12c没有此wmsys.wm_contact函数,故致使所以来的view和package报错,出现如下: ORA-00904: “WM_CONCAT”: invalid identifie
问题如何解决?
从原有低版本11g中copy相应的文件,在19c中执行创建wm_contact函数;具体如下: 从11g的O R A C L E H O M E / r d b m s / a d m i n 目 录 下 拷 贝 o w m c t a b . p l b 、 o w m a g g r s . p l b 、 o w m a g g r b . p l b 三 个 文 件 至 19 c 的 ORACLE_HOME/rdbms/admin目录下拷贝owmctab.plb、owmaggrs.plb、owmaggrb.plb三个文件至19c的ORACLE HOME/rdbms/admin目录下拷贝owmctab.plb、owmaggrs.plb、owmaggrb.plb三个文件至19c的ORACLE_HOME/rdbms/admin/目录下。然后依次执行owmctab.plb、owmaggrs.plb、owmaggrb.plb这三个文件。
查看owmctab.plb脚本内容,因owmctab.plb需要引用owmt9012.plb,而owmt9012.plb需要引用owmt9013.plb,故需要需要从11g中scp到19C中,如下共计5个文件。 owmctab.plb owmt9013.plb owmt9012.plb owmaggrs.plb owmaggrb.plb
19c中oracle环境下依次执行如下命令: SQL> @?/rdbms/admin/owmctab.plb SQL> @?/rdbms/admin/owmaggrs.plb SQL> @?/rdbms/admin/owmaggrb.plb
参考如下链接: https://blog.csdn.net/alicewang99/article/details/89945252
创建wm_concat函数 –首先使用dba账号登录oracle数据库 –解锁wmsys用户 alter user wmsys account unlock;
–并为wmsys用户授权,可根据需要授权,不建议授权所有权限 grant all privileges to wmsys;
–如果不知道wmsys用户的密码,可以修改其密码 alter user wmsys identified by 123456;
–使用wmsys用户登录数据库 conn wmsys/123456
–在wmsys下创建可用的wm_concat函数,直接执行以下语句 –定义类型 CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 IN VARCHAR2) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER ); /
–定义类型body: CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL IS STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER IS BEGIN SCTX := WM_CONCAT_IMPL(NULL) ; RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 IN VARCHAR2) RETURN NUMBER IS BEGIN IF(CURR_STR IS NOT NULL) THEN CURR_STR := CURR_STR || ‘,’ || P1; ELSE CURR_STR := P1; END IF; RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER IS BEGIN RETURNVALUE := CURR_STR ; RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER IS BEGIN IF(SCTX2.CURR_STR IS NOT NULL) THEN SELF.CURR_STR := SELF.CURR_STR || ‘,’ || SCTX2.CURR_STR ; END IF; RETURN ODCICONST.SUCCESS; END; END; / –自定义行变列函数: CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2) RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ; /
–创建完成,给其创建同义词及授权,以供其他用户能正常使用。 create public synonym WM_CONCAT_IMPL for wmsys.WM_CONCAT_IMPL / create public synonym wm_concat for wmsys.wm_concat /
grant execute on WM_CONCAT_IMPL to public / grant execute on wm_concat to public /
参考链接: https://blog.csdn.net/sinat_36257389/article/details/81004843 使用listagg函数代替 基本语法: SELECT T .DEPTNO, listagg (T.ENAME, ‘,’) WITHIN GROUP (ORDER BY T.ENAME) names FROM SCOTT.EMP T WHERE T.DEPTNO = ‘20’ GROUP BY T.DEPTNO
1.个人进行oracle11g升级12c以上大版本的升级案例中,所遇到的第一个大坑;各位亲,请留意。 2.至于oracle官方为何弃用wm_contact函数,文中个人初步推断为该函数执行效率低的原因,后续具体原因,文章待定。 3.Oracle大版本后的升级,一定要谨慎再谨慎,充分做好应用测试。
【参考】 https://www.cnblogs.com/YuyuanNo1/p/7910714.html 【参考】 https://blog.csdn.net/sinat_36257389/article/details/81004843
3、ORA-28040: No matching authentication protocol
这个问题是因为版本问题,需要向下兼容,在数据库服务器的那天机器中D:\app\Administrator\product\12.1.0\dbhome_1\NETWORK\ADMIN\sqlnet配置两行东西
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) SQLNET.ALLOWED_LOGON_VERSION=8