拉取镜像
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
导入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=你的文件