由于本机mac空间不够(哈哈,促进我学习),所以想搭建一个云Oracle环境。
之前写过windows搭建的,但是之前11g(项目要求)一直安装不上,索性就把服务器换成linux,准备改用docker的方式来进行搭建。
- 阿里云申请 linux 服务器,这里我的是 CentOS 7.4 。
- 安装 docker 。
- 下载 Oracle 镜像并安装。
- 导入数据(通过DMP导入,需创建表空间,用户等)。
Docker简单来说,就是一个虚拟机,你要什么应用,就直接输入命令安装,不用就直接删掉,沙盒傻瓜式。官方logo就是鲸鱼上面载着货物,这里我主要是用来安装 Oracle,mysql,tomcat什么的。logo如下图:
废话不多说,就让我们开始吧。
对于 linux 服务器来说,安装docker非常简单,不过需要 CentOS 内核版本高于 3.10,使用uname -r 来查看。如下图:
具体的安装步骤,可以参考这篇博文 https://blog.csdn.net/qq_36892341/article/details/73918672,写得很清楚,就不再赘述,如有不懂,可以留言。
使用docker search oracle 来搜索 oracle 的版本,我这里选用的是 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g ,这是阿里云的一个 oracle 11g 版本,需要其他版本的小伙伴可以自行选择。
使用如下命令来进行镜像的拉取
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
拉取完后,可以使用 docker images 来查看已有镜像
可以看到,REPOSITORY 就是镜像名称,TAG 是版本号,IMAGE ID 是镜像的编号,后面的见名知意了。
启动 Oracle 服务,使用如下命令即可,-p 将容器的 8080 端口映射到主机的 8080 端口(-p 主机端口:容器端口)
docker run --name registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g -p 1521:1521
之后使用 docker ps 来看启动中的容器。
这里可以看到,oracle 服务已经启动(即 ff94a17f84a7)
3.1,导入 dmp 数据文件
首先,需要从本机拷贝 dmp(从其他库导出的数据文件,包含数据 + 表结构等) 数据到 Oracle 容器中
格式:docker cp /本地文件地址 容器ID:/容器文件存储地址,如下:
docker cp /home/oracle/data_20181104.dmp ff94a17f84a7:/home/cloudera
【注:容器ID(这里我的是ff94a17f84a7)请换成自己的】
3.2,创建表空间及用户
使用如下命令进入 docker 容器内
docker exec -it ff94a17f84a7 bash
使用数据库管理员方式进行登录
这里我使用 sqlplus,提示 command not found ,不用担心,使用 su - oracle 切换下用户到 oracle 用户 ,然后 sqlplus,之后 sys/sys as sysdba 进行登录,如下图,登录成功!
进行表空间的创建:
这里分为四小步:
1,创建临时表空间:
create temporary tablespace TEST_DBF_TEMP tempfile '/home/oracle/data/TEST_DBF_TEMP.dbf' size 50m autoextend on next 50m maxsize 2048m;
2,创建正式表空间:
create tablespace TEST_DBF datafile '/home/oracle/data/TEST_DBF.dbf' size 50M autoextend on next 50m maxsize 2048m;
3,创建用户并且指定表空间:
create user TEST identified by "123" default tablespace TEST_DBF temporary tablespace TEST_DBF_TEMP;
4,用户授权:
grant create session,connect,resource,dba to TEST;
3.3,导入 dmp 文件:
imp TEST/123 file = /data_20181210.dmp full=y;
静静等待导入完成即可。
PS:阿里云记得去云服务器控制台开放数据库对应的端口即可外网连接。
配置规则
选择克隆一个,输入 docker ps 中 oracle 对应的主机端口即可:
配上成功图:
Bingo!
今天起来准备工作,Oracle无法连接了,可能原因:
- 连接时使用的sid不正确,进入容器,连接后使用 SELECT name FROM v$database; 查看SID。
- dokcer容器中 Oracle 挂了。
- 其他未知原因(如电脑没有连网,磁盘空间满了,用户名密码错误等)。
马上进服务器去docker ps 查询在线容器,但是发现Oracle还在。
于是,docker exec -it ff94a17f84a7 bash 进入到容器 。
lsnrctl start启动监听程序,如下图,提示已经启动了。
sqlplus /nolog进入,conn / as sysdba管理员连接,然后startup ,如下图,提示启动成功,数据库打开。
Bingo!
1. 查看需要修改的容器,记住 container id
docker ps -a
2. 停止容器
docker stop xxx
3. 修改容器的端口映射配置文件
vim /var/lib/docker/containers/{container_id}/hostconfig.json
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "8080"//宿主机ip
}
]
},
4.重启docker服务
service docker restart
5.启动容器
docker start xxx
这个错误还真的是奇葩,我放个元旦回来,就什么都操作不了了?
重启 docker 服务
systemctl restart docker
重启容器成功