zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle数据库的安装

2023-09-11 14:22:57 时间

对于程序员来说,数据库是必不可少的。工作中一般都是由DBA来完成数据库的搭建与管理,程序员一般只负责开发工作。但是我们身为程序员有经常会在家里自己学习或者在家办公,就像现在的新冠疫情之下浦东全封了,只好在家办公了。此时,如果没有VPN或者不能远程连接公司电脑,自己家里就可能需要一个数据库了。工作中我们用到的数据库可能各种各样,但是大家了解的比较多的、面试中问的比较多的、各种视频教程公开课讲的比较多的,还是MySQL。就拿oracle来说,可能用的人比较多,但是大家还是对mysql了解的多。这么多年的工作中我用到Oracle的时候比较少,当然了解的也不多,至于搭建Oracle,之前都没有做过,也没有想着搭建Oracle是否容易。最近因为工作的缘故,需要自己先搭建Oracle数据库,原以为和mysql一样,不管是在windows上还是Linux上,抑或是容器中,都很简单。谁知道,真正在做这件事的时候发现,没有想象的那么容易。

啰嗦了这么一大堆,其实就是想表达这么几点:

  1. 对于Oracle,大多数人了解的都不如mysql;
  2. Oracle的安装搭建比较难;
  3. 事非亲为不知难。

关于上面第二点,安装过Oracle的朋友们应该有所感受,而我这次的感受是特别强烈,一个字,难;两个字,真难;N个字,这特么什么跟什么啊,怎么安装个Oracle都这么难啊!具体怎么个难呢?简单来说,搞坏了我两台半的虚拟机。我们一一来说,这个不算啰嗦话,等我讲完就知道了。

开始之前,我们说一下虚拟机的情况,虚拟机是 CentOS 8-Stream。注意这一点,我后面的很多错误,个人感觉都与这个有关,而且解决起来比较麻烦,网上的解决方案都是依托于 CentOS 8 或者 CentOS 7。通过这次安装 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安装Oracle19c

我们在 docker 容器中安装。

第一次,把虚拟机的 /var 目录空间直接搞没了,空间不足。报错如下:

Failed to set locale, defaulting to C.UTF-8
Config error: [Errno 28] No space left on device: '/var/log/dnf.log': '/var/log/dnf.log'

又是查看磁盘空间、查看当前目录空间的,又是清理空间,又是迁移文件,又是搞软链接、硬链接的,折腾了半天,结果还是gg。

Docker CE Stable - x86_64                                                         11 kB/s | 2.3 kB     00:00    
Errors during downloading metadata for repository 'docker-ce-stable':
  - Status code: 404 for https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/x86_64/stable/repodata/rep

这样不明显,截图如下:

 Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream                                                          73  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

 这貌似是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了。

yum源的配置也出问题:

 没有baseos那一个,貌似和上图第二个是类似的东西。

其实是配置过的:

 但是就像上面说的可能与 CentOS 8 Stream有关,网上的都是CentOS 8。

还有其他的错误:

 什么 找不到policy.33文件了:

 我只有 policy.31文件。

由于之前 /var 分区空间不足,我移动了文件,结果导致docker启动不了了,执行命令如下:

 docker exec -it oracle19c /bin/bash

错误如下:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

貌似docker没有启动,实际上是启动的。我们再启动试试:

systemctl start docker

然后执行上面的语句,结果还是如此。

总结:配置docker加速器后依然失败,/var 分区空间不足,后面折腾的docker启动失败,算是废了一台虚拟机。

我们换一台虚拟机——重新搭建了一台虚拟机,这次没有配置分区,就默认分区了。

第二次:docker安装Oracle19c

找了一个朋友帮忙,先安装的19c版本的。

先上链接:docker安装oracle19c

不多说了,反正结果是失败的,貌似这篇文章看着感觉应该是OK的,不知道为什么,朋友远程帮我也不行,他说可能是这个Oracle19c的镜像有问题,毕竟都不是官方的镜像,而是个人自己构建的镜像。

第三次:docker安装Oracle11g

上一个链接失败了,我们又换一个,也不一定非要使用Oracle19c,11g不也一样嘛,只要可用就行,不追求新的,新的坑多。

上链接:Docker 安装 oracle

我们也跟着记录一下,自己总结一下。

1、拉取 oracle11g 的镜像

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

 结果如下:

 

2、安装 oracle (这里没有配置自动启动容器 和 文件映射)

上文中的命令如下:

docker run -d –p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

我使用这个命令执行的时候会报错,不行。换了如下命令是OK的:

docker run -d --name oracle11g -p 1521:1521 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

其实就是:

# 这个 oracle11g 是你给它起的名字,我当时少写了个 g,也是ok的
# 后面的镜像名字不能错,这是docker镜像仓库中的名字
docker run -d --name oracle11g -p 1521:1521 镜像名字

 这是我采用原文的命令执行的结果:

 换做我的那个那个命令的结果:

3、启动容器

docker start oracle11g

注意:因为我在执行 run 命令时,给它的名字是oracle11,没有g,所以报错了。

4、配置 oracle

# 注意这个 oracle11 还是对应 run 命令时你起的名字
docker exec -it oracle11 bash

5、切换oracle数据库的root用户下,密码:helowin

su root

切记:此时不要退出 docker,这个就是在 docker 容器中的操作。下面是我当时的操作。

 当时没有看文章,以为是虚拟机的登陆用户,结果输入密码错误,后来一看原来是在docker中,然后就退出来了。接着就进行了下面的步骤,一直到切换回 oracle 用户时报错了,我以为这篇文章又是坑爹的。后来才发现是我错了。不应该退出 docker ,直接在docker中切换 root 用户。

错误示范:

看到 用户 oracle 不存在我傻眼了,感觉自己错了。

6、修改profile的配置文件,打开profile文件,在末尾添加配置

vi /etc/profile

然后在最下面插入:

export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2

export ORACLE_SID=helowin

export PATH=$ORACLE_HOME/bin:$PATH

 以上插入的内容不用修改,直接 copy 即可。

7、刷新文件

source /etc/profile

8、创建软连接 

ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

 9、切换oracle环境

su - oracle

 

 截图中红框就是镜像的id,这几步没有相应信息。

10、登录sqlplus,修改sys、system用户密码,创建用户

# 登录
sqlplus /nolog

# 连接
conn /as sysdba

# 修改密码
alter user system identified by system;
alter user sys identified by sys;

# 创建用户
create user dev identified by dev;

# 并给用户赋予权限
grant connect,resource,dba to dev;

最后的 quit 退出 SQL 是凭借感觉输入的,结果还是OK的。exit就是退出docker的命令。

 注意:这10个步骤都是在 docker 中操作的,不要退出 docker。

总结

三轮下来,我们分别在 Linux、Windows 和 docker 容器中尝试安装了 oracle,尝试了oracle19c、oracle11g等版本,最终发现:

  1. oracle的安装比较困难;
  2. 遇到报错,解决很难;
  3. 不建议在 Linux 和 Windows 上安装。

最重要一点,我们在 docker 容器中成功地安装了 Oracle11g。