新浪博客

和oracle19c的容器数据库相爱(不是)相sha的一周

2022-04-06 13:01阅读:
为了重装19c,整个清明节都远程连在了服务器上,终于在上班第一天搞定,非常不容易! 根据百度出来的教程,基本步骤是一致的:
1 停止oracle服务,在搜索栏输入services,打卡“服务”,停止所有oracle开头的服务
和oracle19c的容器数据库相爱(不是)相sha的一周
2 在开始-程序中找到oracle下的Universal Installer,运行它,除了根不卸载,其余全部画勾卸载
3 清除注册表,此项操作最为不稳定,根据删除的力度会有不同的结果。
3.1 经典删除内容
HKEY_LOCAL_MACHINE\SOFTWARE下oracle目录整体删除
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services删除所有oracle开头的项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\S
ervices\Eventlog\Application,删除所有oracle开头的项
3.2 附加删除内容
根据19c的卸载看,只删除三个经典内容,重装到42%会卡住,所以多删除以下内容:
在HKEY_CLASSES_ROOT删除以Ora、Oracle、Orcl或EnumOra为前缀的键
实际上在第三次重装时,删除了HKEY_CLASSES_ROOT中的oracle内容后还是失败,因此在整个注册表中搜索oracle,除了公司名是oracle或者是.net中的oracle。其余可疑的注册项均删除,此操作异常危险!不要模仿!
4 删除oracle环境变量,Path中的带oracle安装目录的以及oracle_home
5 重启计算机
6 删除oracle的安装目录和app目录
7 删除Program Files下oracle目录
8 删除C:\Users下oracle目录
9 删除ProgramData下oracle内容,此操作应该不需要
****开始重装*****
以上操作完成后,重新解压安装包,将home文件夹放到oracle目录下,双击setup.exe开始重装。各种选项不再赘述,但是最后一次安装中,在42%时报错:Oracle Net Services 配置失败。退出代码是1。Oracle Net Configuration Assistant 失败。,重试后过去了,在70多的时候再次报错:Oracle Database Configuration Assistant 失败。再次重试加跳过后完成了安装。
安装完成后打开服务,里面只有一个oracle服务。不要灰心,在cmd窗口里输入sqlplus / as sysdba,登录成功,说明oracle库数安装成功了,只是实例和监听都没有。
在开始中找到oracle-DBCA,创建一个数据库,选择创建为容器数据库,在43%和51%会卡住很久,耐心等待,最终创建成功。成功后依然没有监听,此时在cmd窗口手工执行lsnrctl start,监听启动。
在本地使用navicat连接数据库,连接成功。安装完成。
此时启动并连接的实例是CDB,也就是容器,容器内的PDB还没有连接成功,需要修改listener和tnsnames.ora文件,修改后重启TNS服务,就可以使用PDB的实例名连接数据库。


和oracle19c的容器数据库相爱(不是)相sha的一周
**************我是oracle没有坑是不可能的分割线********************
在创建成功oracle的cdb和pdb后,使用navicat连接成功,但是应用程序连接时pdb报错,提示是根据SID找不到:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
用navicat选择SID果然也是不通,问题就变成了pdb用服务名连接正常,SID失败。实例本身肯定是ok,问题判断是出在监听的配置上,被坑久了已经坑出了经验。
经过一系列的搜索和尝试,最终解决了此问题,记录一下。
首先在网上找到了一位网友记录的英文解释,在此拷贝一下:
cause:
PDB is not an instance, so using SID in the connection string will not work unless the following listener.ora file setting is in place: USE_SID_AS_SERVICE_listener name=ON When the database is an Oracle Database 12 container database, the client must specify a service name in order to connect to it.
拙劣的翻译一下:
PDB不是一个实例,所以除非listener.ora文件中设置USE_SID_AS_SERVICE_listener name=ON,否则无法使用SID连接。当数据库是一个oracle12c的容器数据库,客户端必须使用一个服务名来连接它。
solution:
Use USE_SID_AS_SERVICE_listener_name=on in listener.ora and restart the listener . This will enable the system identifier (SID) in the connect descriptor to be interpreted as a service name when a user attempts a database connection. Database clients with earlier releases of Oracle Database that have hard-coded connect descriptors can use this parameter to connect to a container or pluggable database.
解决方法:
将USE_SID_AS_SERVICE_listener=on增加到listener.ora,然后重启监听。当用户连接数据库时,这个配置允许使用SID连接时转换为使用服务名。当数据库连接客户端的早些版本硬编码了连接放啊是,可以用此配置来连接可插拔数据库(pdb)。

我的更多文章

下载客户端阅读体验更佳

APP专享