因为要换服务器,重新安装oracle,就想着用下最新的12c。花了整整一天时间,记录过程与问题如下。
一、下载oracle 12c:
官网上的12.1.0.2.0有一半确实是下不了的,用百兆光纤下也是到一半失败。所以只能下载12.1.0.1.0.
二、安装?oracle 12c:
下载完成后解压第一部分,照以往经验,两个部分压缩包放在一起,是会一起解压出来的。所以我就没去检查,然后就悲催了,装了好久说找不到文件,失败了。。所以大家一定记得检查,不然浪费大把时间。如果发现第二部分没解压,就自己单独解压出来,然后剪切database\stage\Components目录下的几个文件夹到第一部分的对应目录下就可以了。中间安装选项就不介绍了,中文的,看自己需求选择。如果第一次像我一样装失败了,把安装到一半的目录全部干掉,不然后面不会覆盖安装的,浪费几g的空间。
三、创建用户及赋予权限?
安装完成了,cmd执行sqlplus登录system用户。然后create user username identitfied by password;创建用于导入旧数据的用户。grant create session,create table,unlimited tablespace to username;赋予新创建的用户创建session,创建表,使用任意表空间的权限。然后就可以等待旧数据库的dmp直接导入了。
?四、安装PL/SQL
PL/SQL可视化管理数据库确实方便很多,必然要装一个。因为PL/SQL只有32位,需要做一些额外动作。下载instantclient-basic-nt-12.1.0.1.0.zip (一定得是32位的,不要下错了版本,Oracle官网有下载),将其解压至Oracle安装目录的Product下(我的是:E:\app\orcl\product)。拷贝数据库NETWORK/ADMIN目录下(E:\app\orcl\product\12.1.0\dbhome_2\NETWORK\ADMIN)的tnsnames.ora和listener.ora文件到解压出来的instantclient_12_1目录下(E:\app\orcl\product\instantclient_12_1)。下载PLSQL+Developer10.0.5.1710及其汉化补丁分别安装。找到你的PLSQL_Developer安装的目录(我的是:E:\PLSQL Developer),新建一个start.txt文档,内容如下:@echo off
set path=E:\app\orcl\product\instantclient_12_1
set ORACLE_HOME=E:\app\orcl\product\instantclient_12_1
set TNS_ADMIN=E:\app\orcl\product\instantclient_12_1
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
start plsqldev.exe
修改后缀名为bat,然后执行此start.bat,此bat会设置临时环境变量并启动plsqldev,如果不设系统环境变量的话,以后都需要从此bat启动。注意三个环境变量的值修改为自己电脑上对应的。这时有可能弹出说缺少某个dll的对话框,去网上下载那个dll放到目录下就可以了。打开PLSQL_Developer后,取消登陆,进入主界面。1.点击--工具--首选项--连接:
2.把上面的注销改为提交
3.OCI库改为带有instantclient_10_2的路径。
4.应用--确定--关闭PLSQL_Developer重新运行就可以了。
???????五、旧数据库导出
停旧数据库的相关应用,关闭需要导出的表的外键关联(不关闭的话,在导入时因为找不到关联实体,会拒绝所有外键关联的行)cmd执行exp 后面就是中文交互式了,主要设置导出文件名,导出模式,是否导出数据等。?具体自己百度。
六、新数据库导入
将dmp文件拷贝到新服务器上,在新服务器上cmd执行imp,也是中文交互式,主要设置导入模式,导入的文件,是否导入数据等。我的模式是用户模式,导入整个用户数据,因为imp是insert方式导入,如果之前导入失败,一定要删除旧表或者旧记录。导入完成后,打开pl为旧数据库和新数据库都重新开启关联。
七、迁移tomcat应用
?我的应用不知道为什么,用内网ip无法连接上数据库,报IO 异常:The Network Adapter could not establish the connection。所以只能换用localhost代替,但是这样就无法调试了,好坑。我的url串是:jdbc:oracle:thin:@localhost:1521:orcl。上面的异常解决后,又报:ORA-28040:No matching authentication protocol。网上的解决方式就两种,更新jdbc驱动和修改SQLNET.ALLOWED_LOGON_VERSION。
我最后反正是通过在E:\app\orcl\product\12.1.0\dbhome_2\NETWORK\ADMIN\sqlnet.ora中添加如下语句:
?SQLNET.ALLOWED_LOGON_VERSION=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
才解决,具体是不是只要其中一句,懒得试了,有知道的朋友可以说下。
我之前是先试了更新jdbc驱动ojdbc6或者7都是不行,才开始修改SQLNET.ALLOWED_LOGON_VERSION。然后从12,11,10,9,8,7或者把所有都括号起来一个个试过来。修改SQLNET.ALLOWED_LOGON_VERSION不用重启数据库或者监听,也不用重启应用,开始应该先试这个的,哎。?
我最后整个app的状态是:app用的jdk1.6编译,用的ojdbc7,并在tomcat7.0下运行。我之前的jdbc版本是ojdbc14,是不是跟jdbc版本没关也不试了,有验证的朋友可以说下。网上还有说什么修改tnsnames.ora?和listener.ora里面的host的,然后还要重启监听,完全浪费我时间。