docker搭建oracle: [helowin/oracle_11g]

拉取镜像

https://cr.console.aliyun.com/images/cn-hangzhou/oracle11-helowin/oracle11-helowin/detail?accounttraceid=24cfa63bff0f483db7d63268686a7a32yabl

1
2
3
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker tag registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g oracle_11g
docker rmi registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11

启动容器

1
docker run -d -p 1521:1521 --name oracle_11g oracle_11g

数据持久化

1
2
docker volume create oracle-11g
docker run -d -p 1521:1521 --name oracle_11g -v oracle-11g:/home/oracle/app/oracle/oradata/ oracle_11g

oracle默认参数

1
2
3
4
5
hostname: localhost
port: 1521
sid: helowin
username: system
password: helowin

修改默认参数

进入容器

1
docker exec -it oracle_11g  bash -c "su - root"

修改 /etc/profile

vi /etc/profile

1
2
3
4
# add
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
1
2
3
# 执行
source /etc/profile
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

登录oracle数据库,修改密码

1
2
3
su oracle
sqlplus /nolog
conn /as sysdba
1
2
3
alter user system identified by password;
alter user sys identified by password;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

修改字符集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 默认字符集 AL32UTF8 --> ZHS16GBK

SQL> conn /as sysdba
SQL> shutdown immediate;
SQL> startup mount

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> alter database open;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改(但是已有数据这样做会乱码):
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

SQL> select * from v$nls_parameters;

SQL> shutdown immediate;
SQL> startup

至此,字符集的修改就完成了,我们可以通过输入命令验证一下,其结果已经变成了ZHS16GBK了。
SQL> select userenv('language') from dual;

创建普通用户

用system登录

1
2
create user test identified by 123456;
grant connect, resource, dba to test;

使用普通用户登陆

1
2
3
-- 查询数据库名, 表名
select name from v$database;
select table_name from all_tables -- where table_name like '%PER' ; --where ROWNUM <10 ;

配置nginx: 反向代理oracle服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nginx 反向代理
stream {
upstream oracle{
hash $remote_addr consistent;
server 192.168.99.101:1521 max_fails=3 fail_timeout=30s;
}

server {
listen 1521;
proxy_connect_timeout 3000s;
proxy_timeout 6000s;
proxy_pass oracle;
}
}
  • 1、网上还有针对sath89/oracle-xe-11g这个镜像的教程,需要注意的是:Oracle快捷版(Oracle XE)是一款基于 Oracle 11g 第2版代码库的小型入门级数据库。Oracle Database XE对安装主机的规模和CPU数量不作限制(每台计算机一个数据库), 但XE将最多存储11GB的用户数据,同时最多使用1GB内存和主机上的一个CPU。
  • 2、如果仅作测试也可以安装这个镜像,镜像大约700兆。而教程中的镜像大约近7G。
  • 3、https://github.com/wnameless/docker-oracle-xe-11g