因为学校的Database Management课环境用的是Oracle+sql developper, 但是我自己是macOS的环境, 无法直接在本地装Oracle数据库, 因为不想装虚拟机所以选择了Docker, 比虚拟机更快而且占用资源少, 只是没想到在配置过程中遇到了不少问题, 花了一个晚上才完成配置, 现在贴上配置过程:
我的laptop是macbookPro2017
首先上几篇我在安装过程中参考的博客:
在MAC上安装docker并部署oracle12.2
在Mac上通过Docker部署Oracle Database 12.2版本
在Mac上通过Docker部署Oracle Database 11.2.0版本
首先下载Docker的客户端, 可以直接去官网下载, 我选择了上面一篇博文里提供的稳定版本:
https://download.docker.com/mac/stable/Docker.dmg
然后安装docker的环境, 登陆, 会在右上角看到小海豚的图标
然后去Github上下载Oracle的Docker Image文件(下载之后的文件是 docker-images-master.zip)
https://github.com/oracle/docker-images
把它解压到一个路径下, 我新建了一个folder叫Docker;
然后去Oracle官网上下载Oracle的镜像文件
https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
选这个版本
得到一个文件oracle-xe-11.2.0-1.0.x86_64.rpm
然后把这个文件移动到一个新的位置:
打开之前解压的那个文件, 然后把它移动到之前的安装目录
/Users/NameOfMac/Docker/docker-images-master/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/oracle-xe-11.2.0-1.0.x86_64.rpm
这里注意一下, 在要把oracle的文件放到对应版本的文件夹里; 比如我下载的11.2版本, 就要放到11.2文件夹里~
然后在此目录下的终端中执行命令:
docker run --name oracle --shm-size=1GB -p 1521:1521 -p 5500:5500 -v /Users/oracle/u02/oradata:/opt/oracle/oradata oracle/database:11.2.0.2-xe
这个命令有几个主要参数:-p 指定端口映射,主机到Docker的端口对应;-shm-size:/dev/shm的大小,不指定,默认是64M,会报错。-v 指定数据库的对应存储路径,我指定了一个Docker之外的本地存储,将数据库独立出来。
完成这个命令,会在本地完成数据库的构建并启动数据库,同时输出告警日志的监控。
会输出很多信息, 当你看到这个红框中的DATABASE IS READY TO USE这个时候就成功了;
千万要注意, 在最上面类似这样的, 有一行, 是自动生成的密码, 千万不能忘了;
ORACLE PASSWORD FOR SYS AND SYSTEM: 093b6723f505ca8a
然后这个时候你可以关掉这个终端了, 然后你可以在命令行中使用docker stop oracle
来关闭oracle数据库, 然后使用docker start oracle
来开启数据库;
可以用docker logs oracle
来获取数据库日志;
到这里我已经长舒一口气感觉差不多完成了, 然鹅到这里我基本都没遇到什么bug, 真正操蛋的事情都在后面:
然后这里就已经基本完成了在docker上的Oracle数据库配置, 首先我们进入sqlplus测试一下:
我们使用命令:
docker ps
查看信息:
这里我们可以看到CONTAINER ID是6396a54c0ced
然后使用命令:
docker exec -it 6396a54c0ced /bin/bash
要注意每个人的CONTAINER ID是不一样的, 自行替换成自己的;
然后这时进入了bash
输入命令sqlplus
, 提示输入用户名和密码
然后可以使用navicat这种软件来连接, 配置类似这样:
用户名是sys, 密码是上面提到的, 我的是093b6723f505ca8a
这个大家是不一样的
然后使用这样来进入sqlplus中:
docker exec -ti oracle sqlplus /nolog
在你成功进入数据库之后, 你可以使用
SELECT username,PROFILE FROM dba_users;
这个命令来查询当前的用户, 可以发现之前的那个sys用户是在的
不过问题不大, 假设你已经进来了,看到了这些用户, 这时候你可以使用下面的命令创建一个新的用户, 名为scott, 密码是tiger:
CREATE USER scott IDENTIFIED BY tiger;
然后你可以用下面的命令给你的这个scott用户提权:
SQL GRANT CONNECT ,RESOURCE ,DBA TO scott;
然后这时候你就会发现自己的用户库中多了一个scott用户了, 然后你可以使用sql developpe 或者navicat来管理数据库了;
我建议你使用navicat, 因为sql developper容易出问题, 而且还有一个深坑, 我等会儿说:
先上一下navicat的连接设置图:
我就是这样链接的, 只要你成功登入了, 以后就算sqlplus在抽风, 你还是能正常访问数据库的,嘻嘻;
当然第一次连接一定要是sqlplus也正常的时候;
如果按我这样的设置不成功的话, 相信我一定是玄学了, 请多试几次, 主不会抛弃你的!
然后就是关于sql developper的问题, 这个软件是很多学校推荐用的, 也是我们学校上课使用的软件, 在windows和linux上都很好用, 但是在mac上可谓是惨绝人寰;
首先安装之后, 第一次打开就可能出现问题, 会提示你Java版本必须要是8以上, 而且不能高于9, 真是脑残, 我电脑的Java环境是
[23:20] (ノ>ω<)ノ ~ $ java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
显然是不支持的, 所以我很愤怒, 解决方法很暴力:
在application中, 右键选择sqldevelopper点击show package contents
然后进入目录/Applications/SQLDeveloper.app/Contents/MacOS/sqldeveloper.sh
编辑这个文件sqldeveloper.sh
然后把TMP_PATH后面的路径改成你自己的Java的安装路径;
大概是这样的:
#!/bin/bash
TMP_PATH=`/usr/libexec/java_home -F -v 1.8`
if [ -z "$TMP_PATH" ] ; then
TMP_PATH=`/usr/libexec/java_home -F -v 9`
if [ -z "$TMP_PATH" ] ; then
osascript -e 'tell app "System Events" to display dialog "SQL Developer requires a minimum of Java 8. \nJava 8 can be downloaded from:\n http://www.oracle.com/technetwork/java/javase/downloads/"'
exit 1
fi
fi
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home"
if [[ -f $HOME/.sqldeveloper/18.3.0/env.sh ]];
then
source "$HOME/.sqldeveloper/18.3.0/env.sh" >> /dev/null
elif [[ -f $HOME/.sqldeveloper/env.sh ]];
then
source "$HOME/.sqldeveloper/env.sh" >> /dev/null
fi
here="${0%/*}"
cd "${here}"
cd ../Resources/sqldeveloper/sqldeveloper/bin
bash ./sqldeveloper >>/dev/null
我发现里面第一段话是一个类似于判断语句, 判断java的版本, 如果不符合就发一个Java版本不对的消息, 请不要犹豫, 直接把这段if then全部删掉;
文件变成这样:
#!/bin/bash
TMP_PATH=`/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home -F -v 1.8`
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home"
if [[ -f $HOME/.sqldeveloper/18.3.0/env.sh ]];
then
source "$HOME/.sqldeveloper/18.3.0/env.sh" >> /dev/null
elif [[ -f $HOME/.sqldeveloper/env.sh ]];
then
source "$HOME/.sqldeveloper/env.sh" >> /dev/null
fi
here="${0%/*}"
cd "${here}"
cd ../Resources/sqldeveloper/sqldeveloper/bin
bash ./sqldeveloper >>/dev/null
这样保存就可以了, 直接打开sqldevelopper, 会提示你java版本有问题
你可以选择无视他, 也可以勾选上"以后都别跟我提这事儿了", 这样假装自己是java8就好了;
然后后面的配置都和navicat一样;
祝你配置成功, 享受Docker的美妙!