当12C PDB遇上JDBC

最近整合了几个测试环境,都放入了12c的容器数据库中。今天本来计划再整合几个测试库进来,结果因为碰到了JDBC的问题给耽搁了。
迁移数据库的步骤,因为数据量不大,数据结构较为复杂,所以直接采用了DataPump来做,而且因为测试环境,所以很多问题有充足的时间去排除和分析。
首先我创建了一个PDB
CREATE PLUGGABLE DATABASE tbillmob ADMIN USER pdb_mgr IDENTIFIED BY oracle file_name_convert=('/home/U01/app/oracle/oradata/testdb/pdbseed','/home/U01/app/oracle/oradata/testdb/pdb/tbillmob');
然后切换到这个容器
SQL> alter session set container=tbillmob;
SQL>  grant dba to pdb_mgr;
查看数据文件的情况
SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
/home/U01/app/oracle/oradata/testdb/pdb/tbillmob/system01.dbf
/home/U01/app/oracle/oradata/testdb/pdb/tbillmob/sysaux01.dbf
创建数据文件USERS,就不要那么多细小的表空间文件了。
SQL> create tablespace users datafile '/home/U01/app/oracle/oradata/testdb/pdb/tbillmob/users01.dbf' size 4G;
创建目录:
SQL> create directory dp_dir as '/home/oracle/dp_dir';
然后在源库中导出一个parfile
SQL> select 'remap_tablespace='||tablespace_name||':'||'USERS'from dba_tablespaces;
在目标端的PDB中导入即可。
impdp pdb_mgr/oracle@tbillmob directory=dp_dir dumpfile=tbillmob.dmp full=y logfile=impdp.log  EXCLUDE=SCHEMA:\"IN \(\'OUTLN\', \'ANONYMOUS\',\'OLAPSYS\',\'SYSMAN\',\'MDDATA\',\'MGMT_VIEW\',\'APEX_030200\',\'SYSTEM\',\'SCOTT\'\)\" parfile=remap_ts.par
整个步骤都是轻车熟路,但是过了一会开发的同学给我反馈,说应用连接报错了。

org.apache.commons.dbcp.SQLNestedException:
Cannot create PoolableConnectionFactory (ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

一看这个错误我就想,开发的同学应该是把迁移后的IP改过来。这个很明显看出来数据库是没启动。我把源端的数据库已经停了,自然是连不进去了。
但是开发的同学反馈说,IP已经修改了。那么这个问题就和DB层面的配置有关了。
比如我配置了一个1525的端口。listener.ora的文件内容如下:
LISTENER_12c_1525=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=teststd.oracle.com)(PORT=1525)
 )
 )
)
SID_LIST_LISTENER_12c_1525=
(SID_LIST=
      (SID_DESC=
      (GLOBAL_DBNAME=testdb)
      (ORACLE_HOME=/home/U01/app/oracle/product/12c/db_1)
      (SID_NAME=testdb)
     )    
     (SID_DESC=
      (GLOBAL_DBNAME=tbillmob)
      (ORACLE_HOME=/home/U01/app/oracle/product/12c/db_1)
      (SID_NAME=tbillmob)
     )
)
如上的配置加粗的部分是错误的,SID_NAME应该是testdb,GLOBAL_DBNAME是PDB的名称。
tnsnames.ora的配置如下:
tbillmob =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = teststd.oracle.com)(PORT = 1525))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tbillmob)
    )
  )
如此一来,发现原来是我这边的配置问题,修改之后以为就万事大吉了,但是查看v$session没有对应的会话,开发同学说这次错误变了。

SQLNestedException: Cannot
create PoolableConnectionFactory (Listener refused the connection with the
following error:
ORA-12505, TNS:listener does not currently know of SID given in connect
descriptor
如此一来,我就感到有些奇怪了,服务端的配置是没有任何问题了,是不是开发的同学哪里没有配置好。
和他们确认,他们说只修改了配置文件中IP的部分,其它的都没有改动。
那么这个问题怎么进一步分析确认呢,我和开发的同学聊了下,因为是测试环境,就建议她先切换IP到源数据库,看看是否正常,如果不正常,说明他们的配置文件有问题。
结果很快就得到了开发的确认和反馈,修改IP到原来的服务器IP就没有任何错误了。
这个问题就开始有些困扰我了,我从开发那里得到的连接信息如下:
jdbc:oracle:thin:@10.127.xx.xx:tbillmob  --连接串信息
app_accmobxxx   --用户名信息
app_R#m^accmob02@abcdef  --密码信息

从提供的信息来看没有发现问题。那我来你自己测试一下。
使用TNS的方式来连接没有问题
SQL>  conn app_accmobxxx/"app_R#m^accmob02@abcdef"@tbillmob
Connected
使用直连的方式,也没有问题
SQL>  conn app_accmobxxx/"app_R#m^accmob02@abcdef"@10.127.xxx:1525/tbillmob
Connected.
所以从上面的测试可以看出这个网络配置应该是没有问题的。
但是这样一来问题就陷入了僵局,DBA没有发现问题,开发的配置文件也经过确认没有问题,那么问题到底出在哪里了呢。
我回过头来开始查看监听日志,可以明显看到TNS-12505的错误,和开发反馈的是一致的。
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
21-OCT-2016 13:55:46 * (CONNECT_DATA=(SID=tbillmob)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=mrdTomcat))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.127.1.xxx)(PORT=52574)) * establish * tbillmob * 12505
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
21-OCT-2016 13:55:49 * (CONNECT_DATA=(SID=tbillmob)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=mrdTomcat))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.127.1.xxx)(PORT=52606)) * establish * tbillmob * 12505
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor

由此可见可能我们的测试还是有一些欠缺之处,但是问题到底在哪里还是无法定位。
我已经打算下一个Java程序来进行验证了。但是程序写完之后,先查看了一下是否有相关的文章,还真找到一篇。原来是url兼容性导致。
jdbc连接cdb数据库时,url兼容2种模式:

  "jdbc:oracle:thin:@192.168.75.131:1521:oracle12c"

  "jdbc:oracle:thin:@192.168.75.131:1521/oracle12c"

重点在后面,一个是 :oracle12c  一个是/oracle12c
带着一丝的惊喜和开发的同学进行沟通,他们带着疑惑的态度进行了修改和测试,从我的监控来看,连接正常了。他们很快反馈问题的原因还确实是这个,但是疑问就出来了,之前一直是使用jdbc:oracle:thin:@192.168.75.131:1521:oracle12c的形式,也一直没有问题,为什么这种就出问题呢。和开发的同学大体聊了下,这是一个12c的数据库,使用了容器的方式,连接方式上会有一些差别,当然这种方式应该对低版本也是可行的,建议开发的同学也这样测试一番,他们也蛮配合,确实测试了一把,发现这种方式"jdbc:oracle:thin:@192.168.75.131:1521/oracle12c"也是可行的。对于低版本也是兼容的。
    所以明白这一点之后,对于PDB的数据迁移也更加有底。问题的解决也不是一方拍板,还是需要多方配合,缺少任何一环,都会使得问题的解决周期加长。

时间: 2024-09-25 11:12:55

当12C PDB遇上JDBC的相关文章

使用12c PDB整合环境的总结

从开始使用12c PDB整合环境以来,发现确实不错,原来11g中整合的难题在这里得到了解决. 目前存在多套的测试环境,之前整合了一批,基本是采用整合schema的方式,但是后来发现这种方式局限性太大,最后就是如下图所示的结构,一半的系统整合完了,还有一半是保留了原来的样子. 所以整合需要解决的问题就很明显了,大体总结了下,有下面几个主要问题. 1.       大量的用户在多个数据库环境重复 2.       重复的表和数据不易管理 3.       大量的表空间信息混乱,多则300多个表空间

Oracle 12c PDB浅析(二)

之前写了第一篇Oracle 12c PDB浅析 http://blog.itpub.net/23718752/viewspace-1823792/?          在上次的基础上继续来学习学习.     首先关于多租户的架构设计来说,就好比在一座已经几十年的老房子上动地基一般,这个变化着实够大,如此重大的变化Oracle不遗余力的想引入进来,肯定有更深层次的原因,当然关于这种设计在SQLServer中确实已经早有实现,在Oracle中却被大家相传为一种略带神奇的架构设计.不过话说回来,这个和

当 App Store 遇上电视,开发者的第四代 Apple TV 开箱体验

当 App Store 遇上电视,开发者的第四代 Apple TV 开箱体验 引子 2015 年 9 月,San Francisco.今年接近 100 华氏度的气温要比往年都更热,而 Apple 例行的秋季发布会也如期在这里举行.自从 iPhone 一战成名后,每年的 iPhone 旗舰机型都是移动通讯设备的业界标杆.而今年秋季发布会大家也自然地将重点放在了最新的 iPhone 6s 上.手机乏善可陈,除了硬件参数的一些常规升级外,我们并没有看到 iPhone 有多大进步.不过这也是大家预料之中

当草根站长遇上品牌运营公司时

笔者最近在优化一个汽车车位锁网站,关键词竞争度倒是不大,当笔者一查几个竞争对手时,发现除了有几个厂家外,居然还有一个品牌运营公司.当草根站长遇上团队作战,经验丰富的品牌运营公司时,笔者是如下分析与制定计划的. 一.网站整体分析 遇上车位锁品牌运营公司,笔者觉得分析网站不能只分析简单的seo数据.应该从网站设计与布局,流量导入,口碑营销与社会化营销等诸多分析. 1.网站结构与设计 该品牌运营公司的网站结构简单,设计简洁大气,也符合该公司定位中高端车位地锁用户.实际上,笔者公司也曾请人模仿了该站,但

快速浏览Silverlight3 Beta:当HLSL遇上Silverlight

HLSL高级着色器语言(High Level Shader Language,简称HLSL),由微软拥有及开发的一种语言,只能供微软的Direct3D使用. HLSL是微软抗衡GLSL的产品,同 时不能与OpenGL标准兼容.他跟Nvidia的Cg非常相似. 看了上面的几行话,可能大家还不是很清楚这个东西与当前的Silverlight的关系.其实在园子里的兄弟发过这篇文章,介绍"silverlight3滤镜效果". 而其在源码中所使用的.ps文件(注:这里不是powershell呀),

transport-使用ffmpeg遇上了问题,都搞了好几天了还是不能解决

问题描述 使用ffmpeg遇上了问题,都搞了好几天了还是不能解决 有个问题想请教一下,就是我使用ffmpeg命令获取rtsp流,然后转换成rtmp再播放,我使用的命令:ffmpeg -rtsp_transport tcp -i rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp -f flv -r 25 -s 640x480 -an rtmp://localhost/myapp/stream1.但有错误:

当搜索引擎营销遇上SaaS(软件即服务)

本文讲的是当搜索引擎营销遇上SaaS(软件即服务),[IT168 资讯]互联网创造若干个神话,也造就无数的网络英雄,随着Web2.0应用的不断深入,销售人员的触脚已经延展到互联网的各个角落,就拿刚刚成立四年的网上提供高端步行和野营装备的Backcountry Edge公司而言,绝对不会放过任何一个营销机会,于是Clickable公司在去年推出新的软件即服务(SaaS)时,该公司马上报名参加测试该服务以求觅得销售良机. Clickable的服务宗旨是在搜索引擎营销的复杂性和乏味性上做减法,让用户能

金融和互联网好像北京遇上西雅图

本文讲的是金融和互联网好像北京遇上西雅图,中国工商银行电子银行部总经理侯本旗表示,金融和互联网好像不太一样,"金融长这样(吴秀波),稳重.可靠.有内涵.互联网长这样,漂亮.任性.烧钱.有魅力.当他们两个遇到一起就变成了这样,被拍成了一部电影<北京遇上西雅图>."他说,未来三年互联网金融势不可当. 以下为演讲实录: 侯本旗:金融和互联网好像不太一样,我不知道大家有没有想过金融长什么样,金融长这样(吴秀波),稳重.可靠.有内涵.互联网长这样(汤唯),漂亮.任性.烧钱.有魅力,当

献给天下的母亲:遇上你,三生有幸

忘不了这22年来,你含辛茹苦把我养大的恩情;忘不了这么多年来,你每日披星戴月的辛勤劳作;同样无法忘却的还有你从满头青丝到如今白发渐多的无悔付出!遇上你--我亲爱的妈妈,三生有幸! --题记 已经弃笔多时,久不写文有多日了.也有好多年没有为我的妈妈谱一曲赞歌了.这首歌不需要有多华丽的词藻,也不需要有多醉人的曲调,且听我慢慢道来我与我的母亲不可分割的缘分. 90年农历十月月二十五日,我在我母亲肚子里躁动不安,久久不肯出世.母亲说我是个折腾人的小家伙,从那日起,母亲就躺在床上,等着迎接我的到来.可是我