ORACLE 19c via Docker on Mac安装教程(1/3)

3,689 阅读2分钟

本文共分为三部分
PART I:安装ORACLE
PART II: 客户端配置 (指路 ➡️   juejin.cn/post/684790…)
PART III: 连接Navicat GUI (指路 ➡️   juejin.cn/post/684790…)


PART I:安装ORACLE

1.软件安装

             - 我选择的是 Linux x86-64 ZIP文件
  • oracle的docker image
            - 打开terminal进入你想下载到的目录
            - 依次输入指令
$ mkdir ~/oracle  
$ cd ~/oracle
$ git clone https://github.com/oracle/docker-images.git
           - 将前一步下载的zip文件移动到相同目录下的对应版本文件夹

$ cp LINUX.X64_193000_db_home.zip ~/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/

2.构建docker镜像

$ cd ~/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles        
$ ./buildDockerImage.sh -v 19.3.0 -e
完成上述指令后,可以查看已有镜像(同时还自动构建了Oracle Linux7的镜像)

$ docker image ls


<附上>docker image的官方完整运行指南
- 或访问本地README文件(注意指令执行的位置)

$ vi docker-images/OracleDatabase/SingleInstance/README.md

3.构建该镜像的容器

1)首先创建一个本地文件夹存储oracle的数据文件

$ mkdir -p ~/oracle/oradata/oracle19c
2)在构建容器的时候,系统会自动创建新的数据库,我们使用-v参数来将刚刚创建的目录映射到容器内的数据文件目录中,使这些数据文件存储在本地
- 官方给的运行格式

docker run --name oracle19c \     //oracle19c是你要给你数据库取的名字,之后可以直接用这个启动,而不用每次查id                
-p 1521:1521 \                    //端口                
-p 5500:5500 \                
-v /Users/Kamus/oracle/oradata/oracle19c:/opt/oracle/oradata \    //映射数据文件到本地                
oracle/database:19.3.0-ee         //image名称,用image ID也可以(我这里是上图中的c7a5abc178af)
- 举例

$ docker run --name oracle19c -p 1521:1521 -p 5500:5500 -v 
/Users/wyn/oracle/oradata/oracle19c:/opt/oracle/oradata oracle/database:19.3.0-ee
3)然后会运行很长时间,慢慢等…..30 minutes later…..
4)完成以后,不会跳回命令行输入界面,而是停留在log文件,看到以下内容就说明创建完成了

######################### DATABASE IS READY TO USE! #########################

5)可以检查容器已经在正常运行

$ docker ps | grep oracle


4.设置密码

在界面上出现的log内容里,第一行可以看到随机分配的账号初始密码

ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: aPNa4TEcIUf=1
我们也可以直接执行.setPassword.sh文件修改密码

$ docker exec oracle19c ./setPassword.sh oracle


5.运行container

然后就可以开始运行我们的数据库了!!!

- 进入root用户模式(部分操作只能在root用户下进行)

$ docker exec -it --user root oracle19c /bin/bash


<附上>linux 命令终端提示符显示-bash-4.2#而不是root@主机名 + 路径的解决方法 ——————————————————————————————————————

问题出现的原因是root在/root下面的几个配置文件丢失,丢失文件如下:
1).bash_profile
2).bashrc
以上这些文件是每个用户都必备的文件。
使用以下命令从主默认文件重新拷贝一份配置信息到/root目录下

$ cp /etc/skel/.bash_profile /root/  
$ cp /etc/skel/.bashrc /root/
- 进入普通用户模式

$ docker exec -it oracle19c /bin/bash


6.进入sqlplus

接着就可以进入sqplus执行SQL语句啦

$ sqlplus system/oracle@localhost:1521/ORCLCDB
sqlplus: 执行指令
system: 登录用户名(初始还有SYS, PDBADMIN共三个账号)
oracle: 登录密码(刚第四步中设置的)
localhost: oracle的服务器所在的IP地址
1521: 端口号
ORCLCDB: SID/SNAME




7.可能出现的部分错误集合

1)不知道是不是我自己安装的问题,刚进来跑sqlplus会报错

ERROR:        
ORA-12162: TNS:net service name is incorrectly specified
这个错误出现的原因是部分变量没有指定值,可以有两种方式解决
⚠️注意:首先要查清楚自己系统的对应值是什么,不能乱改
在第一次运行容器的时候,出现初始密码那里,后面接着就会显示你的GLOBAL_DBNAME和ORACLE_HOME,SID等
把当时的值复制过来就可以,我这里只缺了SID,所以我补上了SID

- 直接export赋值,这个操作只改变当前session的值,下次进入又会复原

ERROR:  ORA-12162: TNS:net service name is incorrectly specified        
[oracle@oraclehost ~]$ echo $ORACLE_HOME
/opt/oracle/product/19c/dbhome_1        
[oracle@oraclehost ~]$ echo $ORACLE_SID

[oracle@oraclehost ~]$ export ORACLE_SID=orcl 
[oracle@oraclehost ~]$ echo $ORACLE_SID
orcl
- 修改配置文件~/.bash_profile

ERROR:        
ORA-12162: TNS:net service name is incorrectly specified        
[oracle@d90999e88f74 ~]$ vi ~/.bash_profile
—————————以下为.bash_profile内容—————————————

—————————————————————————————————

[oracle@d90999e88f74 ~]$ source ~/.bash_profile
(但是不知道为什么,我的电脑这样跑了下次再进来还是会被复原。。。TAT)
UPDATE:写到~/.bashrc文件中再source一下就可以了,之后也不会再复原

2)

ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initorcl.ora'       
$ cp /opt/oracle/admin/ORCLCDB/pfile/init.ora /opt/oracle/product/19c/dbhome_1/dbs/initorcl.ora

3)

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist            
$ sqlplus /nolog
SQL> connect / as sysdba       
SQL> startup

4)另外遇到有报错需要修改listener.ora等配置文件的话,配置完成后需要重启服务

$ lsnrctl stop          //停止服务    
$ lsnrctl start         //开启服务       
$ lsnrctl status        //查询服务状态


[参考]