一、安装oracle12c具体步骤:
1、docker拉取oracle数据库镜像
docker search oracle
查看可以使用docker拉取的oracle镜像;
2、docker下载oracle镜像
docker pull truevoly/oracle-12c
docker images
3、创建数据库挂载文件
将docker中的数据库文件同步到你的主机目录下,防止容器删除后数据库丢失。
[root@localhost ~]# mkdir -p /var/local/ora_data
[root@localhost ~]# chmod -R 777 /var/local/ora_data/
4、创建Oracle容器
[root@localhost ~]# docker run -d -p 2122:22 -p 9090:8080 -p 1521:1521 --name oracle12c truevoly/oracle-12c
#如果需要指定目录位置就使用 -v参数
[root@localhost ~]# docker run -d -p 2122:22 -p 9090:8080 -p 1521:1521 -v /var/local/ora_data:/u01/app/oracle/ --name oracle12c truevoly/oracle-12c
参数 -d 后台运行容器,并返回容器ID ; -p 指定端口 , -v 指定数据卷位置
数据卷的特点:
1、可以供多个容器访问,直接共享或者重用
2、独立于容器周期,不会在删除容器时删除其挂载的数据卷
3、数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含的数据这些数据会复制到新的容器中
4、可以直接对数据卷里的内容进行修改
创建成功后会返回一大串字符串:
ee92e88fea086c05af307d0274e1555ab04bfe747bb7b5b5e2198074bc40cdde
5、查看启动日志
[root@centos7-64-16g docker]# docker logs -f 289228b8ae215ac690b955e309b49f9826fb0f49fcd9e415299f64d4ea632f5b
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console
PL/SQL procedure successfully completed.
Starting import from '/docker-entrypoint-initdb.d':
Import finished
Database ready to use. Enjoy! ;)
ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
看到这里,就说明已经启动成功了,ctrl+c退出即可
6、进入容器修改账号密码设置
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee92e88fea08 truevoly/oracle-12c "/entrypoint.sh " 6 minutes ago Up 6 minutes 0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:2122->22/tcp, :::2122->22/tcp, 0.0.0.0:9090->8080/tcp, :::9090->8080/tcp oracle12c
//进入容器内部
[root@localhost ~]# docker exec -it ee92e88fea08 /bin/bash
//切换成oracle用户
root@ee92e88fea08:/# su oracle
//进入sqlplus
oracle@ee92e88fea08:/$ $ORACLE_HOME/bin/sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Sun Aug 1 03:15:37 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
//设置密码有效期为无限制
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.
//解锁system用户
SQL> alter user SYSTEM account unlock;
User altered.
//创建一个账号为test_lx的用户密码设置为test_lx
SQL> create user test_lx identified by test_lx;
User created.
//为这个用户赋予管理员的权限
SQL> grant dba to test_lx;
Grant succeeded.
SQL> read escape sequence
//ctrl + p + q 退出容器(注意,不要exit退出,防止容器直接关闭了)
OK,现在Oracle数据库已经启动完毕!
hostname:docker所在宿主机的ip
port:1521
username1:system
password:oracle
username2:test_lx
password:test_lx
sid:xe
7、验证数据库可用性
查看容器的ID
[root@k8s-client1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fafcbedc8b85 docker.io/truevoly/oracle-12c "/entrypoint.sh " 20 minutes ago Up 20 minutes 0.0.0.0:1521->1521/tcp, 0.0.0.0:8080->8080/tcp gracious_newton
进入容器
[root@k8s-client1 ~]# docker exec -it fafcbedc8b85 /bin/bash
root@fafcbedc8b85:/#
切换数据库用户
root@fafcbedc8b85:/# su oracle
oracle@fafcbedc8b85:/$
进入数据库
oracle@fafcbedc8b85:/$ $ORACLE_HOME/bin/sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Apr 13 12:38:44 2020
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
SQL>
查看数据库状态
SQL> select status from v$instance;
STATUS
------------
OPEN
查看oracle状态,修改system用户密码。
## 使用sqlplus 工具,进去命令行,用户名system,密码oracle
sqlplus
## 查看oracle现在的状态 ,状态为 OPEN 则正常,表示已开启状态。
SQL>select status from v$instance;
## 修改用户 system 的密码为 oracle12c ,可以自定义
SQL>alter user system identified by oracle12c;
## 用connect as sysdba登录
SQL>alter user sys identified by oracle12c;
给system用户赋予sysdba权限.sys用户用connect as sysdba登录,输入: grant sysdba to system;
连接Oracle数据库:
hostname:docker所在宿主机的ip
port:1521
username1:system
password:oracle
username2:autotest
password:autotest
sid:xe
##########################################################################
遇到的问题:
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initorcl.ora'
解决方法:
[oracle@02f410cfa426 dbs]# cd /opt/oracle/admin/ORCL/
adump/ dpdump/ pfile/ xdb_wallet/
[oracle@02f410cfa426 dbs]# cd /opt/oracle/admin/ORCL/pfile/
[oracle@02f410cfa426 pfile]# pwd
/opt/oracle/admin/ORCL/pfile
[oracle@02f410cfa426 pfile]# ls
init.ora.0122022181530
[root@oracle19c dbs]# cp /opt/oracle/admin/ORCL/pfile/init.ora.8262022174232 /opt/oracle/product/19c/dbhome_1/dbs/initorcl.ora
[root@oracle19c pfile]# chown -R oracle:oinstall /opt/oracle/product/19c/dbhome_1/dbs/initorcl.ora
[oracle@02f410cfa426 bin]$ sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Total System Global Area 2466250400 bytes
Fixed Size 9137824 bytes
Variable Size 536870912 bytes
Database Buffers 1912602624 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
问题描述
ORA-01507: database not mounted ORA-01102: cannot mount database in EXCLUSIVE mode
问题分析: 由于重启了Oracle,导致有资源没有被释放 发现Oracle的后台进程SMON未关闭 问题解决:kill掉相应进程
SQL> startup
ORACLE instance started.
Total System Global Area 276824064 bytes
Fixed Size 778736 bytes
Variable Size 137371152 bytes
Database Buffers 138412032 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.
SQL>
数据库成功OPEN.