云服务器部署Oracle(主要解决部署过程中遇到的问题)
一、Oracle安装
详细见https://blog.csdn.net/se34218/article/details/111477648
大致跟着上面走就行,但是会遇到很多问题
注意:
1. 切换oracle用户问题
在进行oracle的相关操作的时候必须切换到oracle用户,包括环境也要切换,所以使用如下代码
su - oracle
2. 无法正常打开sqlplus———rlwrap安装问题
上面教程的第五步,安装rlwrap是必要的,不安装的话,在oracle环境下无法正常打开sqlplus
3. 防火墙开启问题
oracle运行需要用到1521这个必要的端口,我们可以在阿里云控制台的轻量应用服务器中的防火墙来设置开放端口
4.数据库编码问题:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 *# sqlplus 操作需要用到的编码,要和数据库编码一致
上面配置的编码格式就是utf-8,因此数据库打开的sql文件必须是utf-8才行,否则会出现中文乱码,导致运行出错
二、安装过程中遇到的问题
1. 静默创建数据库失败
错误情况:
/etc/init.d/oracledb_ORCLCDB-19c configure
Configuring Oracle Database ORCLCDB.
准备执行数据库操作
已完成 8%
复制数据库文件
已完成 31%
已完成 100%
[FATAL]
正在对命令行参数进行语法分析:
参数"silent" = true
参数"local" = true
参数"inscomp" = server
参数"insprtcl" = TCP
参数"orahome" = /opt/oracle/product/19c/dbhome_1
参数"instype" = custom
参数"listener" = LISTENER
参数"lisport" = 1521
参数"cfg" = local
参数"responsefile" = /opt/oracle/product/19c/dbhome_1/network/install/netca_typ.rsp
完成对命令行参数进行语法分析。
Oracle Net Services 配置:
LISTENER:没有为主机 server12c 返回有效的 IP 地址。
完成概要文件配置。
有关详细信息, 请查看跟踪文件: /opt/oracle/cfgtoollogs/netca/trace_OraHome1-2009246下午1741.log
Oracle Net Services 配置失败。退出代码是1
已完成 8%
已完成 0%
有关详细信息, 请参阅日志文件 "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log"。
Database configuration failed
原因:
主机IP配置失败
在上面链接教程的第三步 配置环境变量 中,配置了ORACLE_HOSTNAME,而这里的错误信息就是因为找不到这个主机名对应的IP,hosts文件配置格式如下
但是在我反复核对之后,发现hostname并没有写错,再翻了其他安装教程之后发现,配置完环境变量之后,必须进行source操作,才会生效
解决办法:
1.先检查 /home/oracle/.bash_profile(配置环境变量的文件)的HOSTNAME 在 /etc/hosts 文件里面是否存在
2.配置完 /home/oracle/.bash_profile 文件之后进行source
source /home/oracle/.bash_profile
2. 重启服务器出现的一系列错误
① oracle需要重新启动:
1.启动监听:
在oracle用户环境下
lsnrctl start
2.启动oracle服务:
进入sqlplus
startup
3.关闭oracle:
关闭监听:
lsnrctl stop
关闭服务:
shutdown immediate
查看监听器状态:
lsnrctl status
② 启动监听失败:
错误原因:
不在oracle用户环境
解决方法:
切换至oracle用户环境,详情见一
③ 启动oracle服务失败–startup失败:
错误情况:
如下图
原因:
在重启服务器之后,导致文件丢失,恢复对应文件即可
解决办法:
1.先切换到root用户环境:
su - root
2.切换到数据文件存放位置:
cd ../opt/oracle/admin/ORCLCDB/pfile/
记得查看一下数据文件名,一般来说是 init.ora
3.复制文件到对应位置:
将数据文件复制到上面报错信息所在的位置,注意文件名不要写错了,要和你报错的文件名对应
cp init.ora/opt/oracle/product/19c/dbhome_1/dbs/initORCLCD.ora
比如上面就是 initORCLCD.ora
4.进入对应文件夹查看一下
cd /opt/oracle/product/19c/dbhome_1/dbs/
5.修改文件权限
chown oracle /opt/oracle/product/19c/dbhome_1/dbs/initORCLCD.ora
chgrp oinstall /opt/oracle/product/19c/dbhome_1/dbs/initORCLCD.ora
3. 静默安装用户密码问题:
sqlplus /as sysdba登录
修改sys/system密码
ALTER USER SYSTEM IDENTIFIED BY newpass;
三、navicat远程连接oracle遇到的问题
0.注意
- 在使用sys用户登陆时,必须用sysdba的方式
- 不知道sys/system用户密码的话,参考【二、3.】进行修改
1. 监听程序当前无法识别连接描述符中请求的服务解决
错误原因:
根据出错信息判断出客户端未监听到实例服务名
其实就是服务名写错了
解决办法:
登录sqlplus,查询服务名
show parameter service_name;
2.创建用户报错问题
错误情况:
原因:
由于我们使用的是静默安装,默认安装的就是容器数据库,容器数据库里面有cdb和pdb的概念,此时我们就是在cdb中,而创建用户必须在pdb才可以,因此只要将数据库改为pdb即可
解决方法:
详细见:oracle19c创建pdb,解决ORA-65096: invalid common user or role name_ora-65096: 公用用户名或角色名无效_林间6的博客-CSDN博客
切换pdb数据库
0)进入sqlplus
sqlplus / as sysdba;
如果进入失败,可以检查下自己的ORACLE_SID和ORACLE_HOME是否设置正确,可以参考文章:
linux下离线安装oracle数据库_linux离线安装oracle_林间6的博客-CSDN博客
(1)查询pdb库:
show pdbs;
上图可以看到我有两个pdb数据库,第一个是自带的pdb模板,后面创建pdb数据库会用到,第二个是我自己创建的数据库,刚创建时时mouted,启动之后就是 read write,表示可以使用;
(2)开启/关闭pdb:
--打开容器
alter pluggable database pdb名称 open;
--关闭容器
alter pluggable database pdb名称 close;
(3)切换PDB
alter session set container=pdb名称(指定容器);
(4)切换之后即可在sqlplus命令行中进行用户添加操作了。
如果需要创建pdb可以参考下一点:
四、容器数据库添加pdb
详情见网址:
oracle创建pdb实例,并配置监听_oracle pdb 监听_林间6的博客-CSDN博客
1.前言:
Oracle 12C以及更高版本中引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
2.创建pdb数据库:
CREATE PLUGGABLE DATABASE pdb名称 ADMIN USER 用户名 IDENTIFIED BY 密码 FILE_NAME_CONVERT = ('/opt/oracle/oradata/ORCLCDB/pdbseed/', '/opt/oracle/oradata/ORCLCDB/crp/');
使用上面代码如果出现报错,将上面路径修改为提示信息的路径即可,注意大小写
3.启动pdb数据库:
alter pluggable database pdb名称 open;
4.配置监听,找到监听文件listener.ora:
listener.ora默认在安装路径里面,比如我的就是 /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
其中 opt就是安装路径,19c是版本,dbhome_1不同版本可能不同名
然后按SID_LIST_LISTENER的格式添加即可,GLOBAL_DBNAME是服务名,SID_NAME是SID
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mm)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC =
(GLOBAL_DBNAME = pdbzlw)
(SID_NAME = ORCLCDB)
)
)
5.重启监听:
lsnrctl start #启动监听
lsnrctl stop #关闭监听
lsnrctl status #查看监听
6.另外:
在容器中创建了用户之后,需要赋予相应权限才能登录
grant RESTRICTED SESSION to 用户名;
普通用户只能使用defualt的方式进行登录