拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
容器操作
创建容器
docker run --detach --publish=1521:1521 --name=helowin_oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g /bin/sh -c '/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/dbstart /home/oracle/app/oracle/product/11.2.0/dbhome_2 && tail -f /home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log'
启动容器
docker start helowin_oracle11g
进入容器
此镜像oracle 用户无密码, su root 密码是 helowin
$ docker exec -it oracle11g /bin/bash
切换到root 用户
$ su root
编辑profile配置oracle环境变量
$ 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
保存后刷新下环境
source /etc/profile
创建软连接,然后重复上一步在刷新下(可能不需要)
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
切换到oracle用户 su - oracle,需要注意的是中间需要加这个-否则软连接无效。
su - oracle
– 没有密码
sqlplus /nolog
conn /as sysdba
#修改数据库最大连接数据;
alter system set processes=1000 scope=spfile;
#修改密码规则策略为密码永不过期;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
导入dmp文件
创建临时表空间
create temporary tablespace user_temp tempfile
'\usr\oracle\oracledata\user_temp.dbf' size 50m
autoextend on next 50m maxsize 2048m extent management local;
创建表空间
SQL> create tablespace user_data logging datafile
'\usr\oracle\oracledata\user_data.dbf' size 50m
autoextend on next 50m maxsize 2048m extent management local;
创建DIRECTORY
create or replace directory dump_dir as '/usr/oracle/dump/dir'
创建用户 并分配表空间
– 创建用户前,建议先删除用户
drop user userA cascade;
create user userA identified by userA123 default tablespace user_data temporary tablespace other_temp;
– 授权连接
grant connect,resource to videa;
– 授权可以是dumpData
grant read,write on directory dump_dir to videa;
grant create job to videa;
grant manage scheduler to videa;
grant create view to videa;
tips: 非必要操作
– 修改用户表空间
alter user user default tablespace other_data temporary tablespace other_temp;
– 重命名表空间
alter tablespace user_data rename to new_user_data;
退出sqlplus,创建directory的目录
sql> exit;
$ su root
// 密码 helowin
$ mkdir /usr/oracle/dump/dir
// 可能需要一步步创建
– 授权
$ chown -R oracle:oinstall /usr/oracle/dump/dir
导入dump文件
先检查dump文件oracel server端的编码
目前我docker 安装的oracle 所使用得编码为AL32UTF8, 客户的环境是ZHS16GBK;, 建议保持一致,可以通过select userenv(‘language’) from dual 进行查询
sqlplus / as sysdba
SQL>shutdown immediate
SQL>STARTUP MOUNT
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN
– 修改编码
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP
退出容器bash --------exit
复制dmp文件到容器中
拷出容器
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
拷入容器
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
$ `docker cp you_dmp_file.dmp helowin_oracle11g: /usr/oracle/dump/dir`
拷贝完毕后,就可以进行导入了,首先进入容器shelldocker exec -it helo_oracle11g bash,然后切换oracle用户su - oracle切记别忘了这个-然后执行impdp命令
impdp videa/videasoft remap_schema=pmcp:videa remap_tablespace=byis2:user_data EXCLUDE=TABLE_STATISTICS directory=dump_dir dumpfile=你的文件
常见问题:
1、当执行修改密码的时候出现 : database not open
提示数据库没有打开,不急按如下操作
输入:alter database open;
注意了:这里也许还会提示 : ORA-01507: database not mounted
不急!继续!
=========== 解决方法===========
输入:alter database mount;
输入:alter database open;
2、使用pl/sql 进行连接 第7步是navicat连接的在最后
之前我们把端口映射到了1521上,所以我们需要进行配置 tnsnames.ora
几个朋友不知道ora文件在哪,所以添加了这一步
docker_oracle11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.211.135)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
打开pl/sql 进行登录 :提示监听程序当前无法识别连接描述符中请求的服务
这时我们需要去看一下oracle 的 lsnrctl 服务
看到这两个了么,任选其一,修改 tnsnames.ora的 service_name=helowinXDB
docker_oracle11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.211.135)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = helowinXDB)
)
)