对于程序员来说,数据库是必不可少的。工作中一般都是由DBA来完成数据库的搭建与管理,程序员一般只负责开发工作。但是我们身为程序员有经常会在家里自己学习或者在家办公,就像现在的新冠疫情之下浦东全封了,只好在家办公了。此时,如果没有VPN或者不能远程连接公司电脑,自己家里就可能需要一个数据库了。工作中我们用到的数据库可能各种各样,但是大家了解的比较多的、面试中问的比较多的、各种视频教程公开课讲的比较多的,还是MySQL。就拿oracle来说,可能用的人比较多,但是大家还是对mysql了解的多。这么多年的工作中我用到Oracle的时候比较少,当然了解的也不多,至于搭建Oracle,之前都没有做过,也没有想着搭建Oracle是否容易。最近因为工作的缘故,需要自己先搭建Oracle数据库,原以为和mysql一样,不管是在windows上还是Linux上,抑或是容器中,都很简单。谁知道,真正在做这件事的时候发现,没有想象的那么容易。
啰嗦了这么一大堆,其实就是想表达这么几点:
- 对于Oracle,大多数人了解的都不如mysql;
- Oracle的安装搭建比较难;
- 事非亲为不知难。
关于上面第二点,安装过Oracle的朋友们应该有所感受,而我这次的感受是特别强烈,一个字,难;两个字,真难;N个字,这特么什么跟什么啊,怎么安装个Oracle都这么难啊!具体怎么个难呢?简单来说,搞坏了我两台半的虚拟机。我们一一来说,这个不算啰嗦话,等我讲完就知道了。
第一轮
我是在Linux上安装的Oracle,这个对于一个有一些经验的程序员来说都是正常现象,毕竟我们的虚拟机不能让它在那吃灰是吧?
第一次安装的是11g版本的,网上找了几个教程,对比之后找到一个还不错的,一步步的走下去,结果走不下去了,把我虚拟机搞的原来好好的东西都搞坏了。
这算坏了半台。
11g不行就换了一个19c的版本安装,以为这次找到了不错的文章,结果还是gg。也可能与我的虚拟机的操作系统有关,我的是CentOS 8 Stream的版本。这个直接不知道怎么搞的,把虚拟机搞的开不了机了。这个太狠了。反正就是各种问题,各种想办法,整了整整一天。
后来换了 一台电脑 ,分别安装11g和19c都是失败。
以上四次安装 ,花费了我整整一天半的时间,在家办公全程工作的那种。
这是我电脑上下载的19c的安装包:
就叫这个名字:WINDOWS.X64_193000_db_home.zip
总结:在Linux上安装Oracle很难。
第二轮
既然Linux上安装这么难,我们就换 Windows 吧,毕竟 Windows 上也没有什么区别,不就是连数据库嘛——实际是领导催得太紧了,它张口一句半天搞定,一天搞不定搞不定就是。。。话是没什么问题,可实际上是另一个团队的leader都说了不好搞,我告诉他之前没搞过。
不说这个了,我们接着在 Windows 上安装吧!下面是我下载的 Windows 版的 Oracle。
直接安装失败,换一台物理机还是失败,不想多说了。
第三轮
我们在 docker 容器中安装。
第一次,把虚拟机的 /var 目录空间直接搞没了,空间不足。报错如下:
又是查看磁盘空间、查看当前目录空间的,又是清理空间,又是迁移文件,又是搞软链接、硬链接的,折腾了半天,结果还是gg。
这样不明显,截图如下:
这貌似是docker加速器没配,那好我们配置docker加速器。
vi /etc/docker/daemon.json
插入如下内容:
{
"registry-mirrors": [
"https://阿里云你的域名.mirror.aliyuncs.com",
"https://mirror.baidubce.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://mirror.ccs.tencentyun.com"
]
}
上面那个阿里云的域名就是你登陆阿里云给你的,每个人 一个,不买阿里云也有,只要登陆,查看方式:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
然后看这里:
也可以按照它给的方式去配置加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
然后 重载配置、重启docker:
systemctl daemon-reload //重载配置
systemctl restart docker //重启docker
折腾半天之后还是gg了。