docker安装oracle11g并且导入dmp文件

镜像

使用如下命令拉取oracle11g镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

由于镜像比较大,拉取需要耗费一些时间
拉取完毕后可以使用docker images查看镜像文件

$ docker images
REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
mysql                                                  latest              990386cbd5c0        4 days ago          443MB
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   latest              3fa112fd3642        3 years ago         6.85GB

容器

1.创建容器

创建容器

$ 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 container ls查看容器

$ docker container ls
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
903c28192988        registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   5 hours ago         Up 19 minutes       0.0.0.0:1521->1521/tcp   helowin_oracle11g

2.启动容器

使用docker start helowin_oracle11g启动容器
使用docker ps查看已经启动的容器

$ docker ps
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
903c28192988        registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   5 hours ago         Up 23 minutes       0.0.0.0:1521->1521/tcp   helowin_oracle11g

3.进入容器shell

使用docker exec -it oracle11g bash进入容器shell,此时使用sqlplus命令发现不能使用,所以先切换root用户,密码helowin

oracle@903c28192988 ~]$ su root
Password:
[root@903c28192988 oracle]#

然后编辑profile配置oracle环境变量,在文件最下方加入

export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
 
export ORACLE_SID=helowin
 
export PATH=$ORACLE_HOME/bin:$PATH

保存后使用ln -s $ORACLE_HOME/bin/sqlplus /usr/bin创建软连接,然后
再用su - oracle切换到oracle用户,需要注意的是中间需要加这个-否则软连接无效。
此时可以使用sqlplus登录了,使用sqlplus /nolog进入sqlplus命令行,然后conn /as sysdba以dba身份登录。

[oracle@903c28192988 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Tue May 14 20:35:25 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn /as sysdba
Connected.
SQL>

导入dmp文件

1.创建表空间

创建临时表空间

SQL> 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;

2.分配表空间

创建用户并分配表空间

SQL> create user user identified by password 
default tablespace user_data 
temporary tablespace user_temp;

修改用户表空间

SQL> alter user user default tablespace other_data temporary tablespace other_temp;

重命名表空间

SQL> alter tablespace user_data rename to new_user_data; 

3.创建DIRECTORY

首先创建directory

 SQL> create or replace directory dump_dir as '/usr/oracle/dump/dir'

然后将该DIRECTORY授权给用户

 SQL> grant read,write on directory dump_dir to user ;

退出sqlplus后,创建目录

$ mkdir /usr/oracle/dump/dir

修改备份目录的属主和属组

$ chown -R oracle:oinstall /usr/oracle/dump/dir

4.导入dmp文件

将所需的dmp文件从宿主机拷贝到容器中,在宿主机中执行以下命令

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

$ docker cp you_dmp_file.dmp helowin_oracle11g: /usr/oracle/dump/dir

当然也可以从容器拷贝文件到宿主机

docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径

$ docker cp helowin_oracle11g: copy_file copy_file

拷贝完毕后,就可以进行导入了,首先进入容器shelldocker exec -it helo_oracle11g bash,然后切换oracle用户su - oracle切记别忘了这个-然后执行impdp命令

$ impdp user/password DIRECTORY=dump_dir DUMPFILE=you_dmp_file.dmp FULL=y;

你可能感兴趣的:(docker,oracle)