由于oracle官方没有docker的镜像(这点让人想不明白),因此我们只能选择个人的镜像,这里我们使用阿里云上一个个人的镜像,当然在使用之前我们可以先配置docker的国内镜像,用于加速下载,这里我们使用的是阿里云的docker加速,也可以选择如下的镜像
vi /etc/docker/daemon.json# 选择任意一个镜像地址即可#Docker中国官方镜像加速{"registry-mirrors": ["https://registry.docker-cn.com"]}# 网易163镜像加速{"registry-mirrors": ["http://hub-mirror.c.163.com"]}# 中科大镜像加速{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
首先我们将oracle的镜像下载下来:
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g;#修改tagdocker tag registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g oracle_11g#删除原来的镜像docker rmi registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g;
接着我们创建一个创建volume以持久化db数据,然后启动oracle容器,挂载在这个volume上
docker volume create oracale-dev;#启动容器,挂载当前volumedocker run -d -p 18080:8080 -p 11521:1521 --name oracle-dev -v oracle-dev:/data/oracle oracle_11g;
接着我们进入当前容器内,进行oracle的配置以及实例名称的修改
docker exec -it oracle-dev /bin/bash;
进入oracle内部的linux以后,切换当前账号为root,默认的密码为: helowin
su root;#输入密码: helowin#修改环境变量配置,添加oracle的启配置参数vi /etc/profile;#在unset -f pathmunge(默认的最后一行)的下一行添加如下内容export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2export ORACLE_SID=helowinexport NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBKexport PATH=$ORACLE_HOME/bin:$PATH#esc + :wq! 退出以后,刷新环境变量配置source /etc/profile;
配置完毕以后,我们需要切换账号到oracle用户来配置和操作oracle
su oracle;#刷新一下 bash环境变量source ~/.bash_profile;#连接oraclesqlplus /nolog;conn /as sysdba;#修改默认的system和sys账号的密码,这里的默认密码是:helowin,然后创建一个我们开发使用的admin账号,赋予dba权限(需要注意的是从这里开始,只要是sql操作,命令结束必须有;否则回车不会生效)alter user system identified by hearyou_system;alter user sys identified by hearyou_sys;create user dev_admin identified by 123456;grant connect,resource,dba to dev_admin;#设置密码永不过期ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;#查看当前的数据库sid实例,这个时候应该是我们在/etc/profile环境变量里面配置的默认sid名称(此名称不允许修改,必须是helowin)select instance from v$thread;#关闭数据库实例shutdown immediate;#退出sql连接exit;
将数据库关闭以后,我们开始修改数据库的实例信息,这里的步骤非常复杂(不知道oracle为什么要搞这么复杂)
# 1.修改/etc/oratab文件vi /etc/oratab;#将 helowin 修改为 orcl,修改后的内容如下:orcl/home/oracle/app/oracle/product/11.2.0/dbhome_2:Y# 2.修改.bash_profile文件,将修改ORACLE_SID的修改为orclvi ~/.bash_profile;# 使用vim快捷键快速修改 :%s/helowin/orcl/g# 3.修改完,保存后退出,刷新环境变量source ~/.bash_profile;#再次查看当前环境变量,看是否已经生效env|grep ORACLE#如果生效,输出的内容应该如下:ORACLE_SID=orclORACLE_BASE=/home/oracle/app/oracleORACLE_TERM=xtermORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
接着我们需要修改一堆文件里面的内容
#4.修改dbs目录下的文件名(dbs目录是用于存放数据库服务器端的参数文件Spfile、初始化文件init、还有密码文件orapwORACLESID在ORACLE_HOME目录下)# 进入到 $ORACLE_HOME/dbs并对hc_helowin.dat, lkHELOWIN spfilehelowin.ora 进行重名名cd $ORACLE_HOME/dbs;mv hc_helowin.dat hc_orcl.dat;mv lkHELOWIN lkORCL;mv spfilehelowin.ora spfileorcl.ora;# 重新生成密码文件,并将旧的密码文件删除orapwd file=$ORACLE_HOME/dbs/oraw$ORACLE_SID password=root entries=5 force=y;rm -rf orapwhelowin;# 这个时候登录数据库,查看实例名称是否已经修改sqlplus / as sysdba;startup;select instance from v$thread;# 输出应该是 orcl 即可#再次关闭数据库shutdown immediate;
完成这一步以后,我们开始做数据库的备份
# 5.进入控制文件的备份目录,根据alter_orcl.log日志文件($ORACLE_BASE/diag/rdbms/原实例名/新实例名/trace)找到控制备份文件oracle的备份文件复制一份进行修改cd $ORACLE_BASE/diag/rdbms/helowin/orcl/trace#查看密码存放的目录pwd;#输入如下: /home/oracle/app/oracle/diag/rdbms/helowin/orcl/trace# 进入alert_orcl.log 查找备份文件目录cat alert_orcl.log |grep 'alter database backup controlfile to trace resetlogs'# 将输出的目录cp改名为orcl.sqlcp /home/oracle/app/oracle/diag/rdbms/helowin/orcl/trace/orcl_ora_1110.trc orcl.sql;#修改里面的sql语句vi orcl.sql;#删除 STARTUP NOMOUNT 之前的内容 /STARTUP NOMOUNT 查出位置 60dd 删除内容#删除 -- End of tempfile additions. 之后的内容 /End of tempfile 查出位置后删除#替换所有的helowin为orcl 命令 :%s/helowin/orcl/g#替换所有的HELOWIN为ORCL 命令 :%s/HELOWIN/ORCL/g#删掉以 -- 的行#将CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG 中的 REUSE 改为 SET 变为了 CREATE CONTROLFILE SET DATABASE "ORCL" RESETLOGS NOARCHIVELOG#将 RECOVER DATABASE USING BACKUP CONTROLFILE 注释掉改为 -- RECOVER DATABASE USING BACKUP CONTROLFILEsqlplus / as sysdba;#生成 文件create pfile from spfile;exit;#最终生成的文件在$ORACLE_HOME/dbs目录下文件名为init$ORACLE_SID.oracd $ORACLE_HOME/dbs;ll -ls;#修改initorcl.ora文件# 删除helowin. 开头的行#替换所有的helowin为orcl 命令 :%s/helowin/orcl/g#替换所有的HELOWIN为ORCL 命令 :%s/HELOWIN/ORCL/gvi initorcl.ora;#修改init.ora 文件#替换所有的helowin为orcl 命令 :%s/helowin/orcl/g#替换所有的HELOWIN为ORCL 命令 :%s/HELOWIN/ORCL/gvi init.ora;#spfileisdms.ora文件修改#删除helowin. 开头的行#替换所有的helowin为orcl 命令 :%s/helowin/orcl/g#替换所有的HELOWIN为ORCL 命令 :%s/HELOWIN/ORCL/g#删除 lkHELOWIN 文件rm -rf lkHELOWIN;# 6.修改$ORACLE_BASE/admin目录下的目录和文件内容cd $ORACLE_BASE/admin;mv helowin orcl;cd orcl/pfile/;#修改$ORACLE_BASE/admin/orcl/pfile目录下init.ora文件vi init.ora.72320146402;#替换所有的helowin为orcl 命令 :%s/helowin/orcl/g#替换所有的HELOWIN为ORCL 命令 :%s/HELOWIN/ORCL/g#7.修改$ORACLE_BASE/diag目录下的目录和文件内容cd $ORACLE_BASE/diag;cd rdbms/;mv helowin orcl;cd orcl/;rm -rf helowin;#8.修改$ORACLE_BASE/flash_recovery_area目录下的目录和文件内容cd $ORACLE_BASE/flash_recovery_area;mv helowin orcl;mv HELOWIN ORCL;#删除控制文件rm -rf control02.ctl;#9.修改$ORACLE_BASE/oradata目录下的目录和文件cd $ORACLE_BASE/oradata;mv helowin orcl;cd orcl/;rm -rf control01.ctl;#10.修改监听的配置文件tnsnames.oracd $ORACLE_HOME/network/admin;vi tnsnames.ora;#将所有的HELOWIN修改为ORCLLISTENER_ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))# 11.调用前面步骤修改好的orcl.sql,生成链接控制文件cd $ORACLE_BASE/diag/rdbms/orcl/orcl/trace;#查看文件的绝对路径,为执行sql做准备pwd;/home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace;#连接数据库sqlplus / as sysdba;#执行修改好的sql,生成连接控制文件@/home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl.sql;#查看数据库运行状态 read_write为可读写模式 READ WRITEselect open_mode from v$database;#查看name 参数show parameter name;#查看实例名是否已经修改为orclselect name from v$database;#关闭数据库shutdown immediate;startup;#退出数据库连接,开启sql监听,再去远程连接数据库即可(如果输出:TNS-01106: Listener using listener name LISTENER has already been started代表已经开启了监听)exit;lsnrctl start;
参考原文地址:
