目录
PART I:安装ORACLE
1.软件安装
2.构建docker镜像
3.构建该镜像的容器
4.设置密码
5.运行数据库
6.进入SQLPLUS
7.可能出现的错误集合
docker
oracle安装介质(https://www.oracle.com/database/technologies/oracle-database-software-downloads.html)
- 我选择的是 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/
$ cd ~/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildDockerImage.sh -v 19.3.0 -e
完成上述指令后,可以查看已有镜像(同时还自动构建了Oracle Linux7的镜像)
$ docker image ls
<附上>docker image的官方完整运行指南
- https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md
- 或访问本地README文件(注意指令执行的位置)
$ vi docker-images/OracleDatabase/SingleInstance/README.md
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
在界面上出现的log内容里,第一行可以看到随机分配的账号初始密码
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: sSNc5GFeSAg=1
我们也可以直接运行.setPassword.sh修改密码
$ docker exec oracle19c ./setPassword.sh oracle
然后就可以开始运行我们的数据库了!!!
- 进入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
接着就可以进入sqplus执行SQL语句啦
$ sqlplus system/oracle@localhost:1521/ORCLCDB
sqlplus: 执行指令
system: 登录用户名(初始还有SYS, PDBADMIN共三个账号)
oracle: 登录密码(刚第四步中设置的)
localhost: oracle的服务器所在的IP地址
1521: 端口号
ORCLCDB: SID/SNAME
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=ORCLCDB
[oracle@oraclehost ~]$ echo $ORACLE_SID
ORCLCDB
- 修改配置文件~/.bash_profile
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
[oracle@d90999e88f74 ~]$ vi ~/.bash_profile
初始安装时,VM内没有vi指令,此处安装的胃centOS下的Oracle,需要使用yum指令安装
$ yum install vi
—————————以下为.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 //查询服务状态
1.刚刚docker上安装的是oracle的服务器端,现在来在本机上配置客户端
2.首先下载oracle的instant client基础包和sqlplus拓展包(这里需要登录oracle账号才能下载哟~)
https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
——————— 前面的下载链接最下方也有官方的下述配置教程———————
3.下载完成后把这两个压缩包都移动到你要放置的路径(先不用解压)
4.打开Terminal进入到该路径下
$ sudo cd /opt/oracle
$ unzip instantclient-basic-macos.x64-19.3.0.0.0dbru.zip
$ unzip instantclient-sqlplus-macos.x64-19.3.0.0.0dbru.zip
(或者直接$ sudo unzip instantclient-\*.zip 同时解压两个压缩包)
5.给这些文件创建引用路径,不然使用的时候软件会找不到
$ mkdir ~/lib
$ ln -s ~/opt/oracle/instantclient_19_3/libclntsh.dylib ~/lib/
6.配置环境变量
$ vi ~/.bash_profile
//在.bash_profile文件内加上以下内容(⚠️ 注意根据自己的服务器设置各变量值)
export ORACLE_HOME=/opt/oracle/instantclient_19_3
export ORACLE_SID=ORCLCDB
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME
export NLS_LANG=AMERICAN_AMERICA.UTF8
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME
7.生成环境变量
$ source ~/.bash_profile
8.现在就可以从本地终端执行sqlplus了
1.安装Navicat : http://www.navicat.com.cn/products#navicat
2.打开Navicat新建一个Oracle的数据库连接
2.根据之前的服务器配置修改客户端连接配置
3.测试连接
4.然后oracle就出现在你的连接列表里啦
5.双击一下建立连接
6.ALL SET!✅
【参考】