1.拉取oracle 11g 的镜像:

  用root登陆服务器,输入下面的命令,拉取oracle 11g的镜像,有点大,6.8G多;

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#注意,这个镜像的底层操作系统版本是centos6.

2. 镜像下载完成后,创建容器:

  *在创建容器之前首先要在服务器或者虚拟机上创建一个data_temp的目录(当然这个名字可以随便取,看个人喜好),并且赋予可读写权限,为了下面运行容器做映射:

mkdir /usr/local/data_temp
chown -R 500.500 /usr/local/data_temp
创建一个文件目录,用于挂载到容器内,做oracle数据备份时数据存放的位置,保证备份数据不丢失。并将文件的权限给到 500.500 这个是在容器内的oracle用户的sid。不用管,后面会用到
docker run -d --name oracle_11g -p : -v /usr/local/data_temp:/home/oracle/data_temp registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
其中,oracle_11g是名称,-p是端口映射,-v是将宿主机的/usr/local/data_temp 目录映射到容器内的 /home/oracle/data_temp内。

3. 进入容器:

docker ps             ## 查看容器的id号,复制一下
docker exec -it xxxxxxxx /bin/bash ## xxxxxxx就是上一部查看的id号

4 . 查看oracle状态,修改system用户密码:

source ~/.bash_profile                          ## 加载一下用户环境变量,进入容器后,自动是oracle用户
sqlplus /nolog ## 使用sqlplus 工具,进去命令行
SQL> connect /as sysdba ## 使用sysdba 连接oracle,最大权限,os认证,只能在本机上登陆使用。
SQL> select status from v$instance; ## 查看oracle现在的状态 ,状态为 OPEN 则正常,表示已开启状态。 SQL> alter user system identified by oracle; ## 修改用户 system 的密码为 oracle ,可以自定义

5. 修改oracle数据库编码为 中国编码(常用编码)。 默认的是美国的UTF8编码(一般不修改):

SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';    ## 查看数据库编码,结果最下面一行则是目前编码

SQL> shutdown immediate;               ## 关闭数据库

SQL> startup mount;                    ## 启动到 mount状态,oracle分为4个状态,详情请百度

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;                        ## 设置session ,下同
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=; SQL> alter database open; ## 打开oracle到 open状态 SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; ## 修改编码为 ZHS16GBK SQL> shutdown immediate; ## 重启oracle ,先关闭,再启动
SQL> startup;

6.  创建自定义的 directory ,用于存放备份数据(很重要):

SQL> create or replace directory DATA_TEMP as '/home/oracle/data_temp';             ## 将挂载进来的目录/home/oracle/data_temp创建到oracle的directoy中。

  创建之后,导出的数据可以指定导出到这个目录,那么数据可以直接在宿主机上的对应目录中拿到,持久化保存。另外需要导入的数据文件也是直接放到这个目录,在容器中则可以调用impdp命令进行导入;至此,基础的操作配置已完成,你可以重新提交这个容器作为新的镜像以保存修改。

7. 然后就是创建表空间,创建用户,并授权:

  创建表空间核用户,这个可以使用工具连接到oracle数据库上进行创建,也可以手动命令行进行创建。注意依然是在sysdba权限下操作,命令如下:

SQL> select name from v$tempfile;    ## 查询临时表空间的路径
## 下面这句,创建表空间,名:tets ,数据文件路径复制临时表空间数据文件路径然后改一下文件名就行了,大小:1G, 自动增长:50M 。 参数根据自己的需求自行修改
SQL> create tablespace test datafile '/home/oracle/app/oracle/oradata/helowin/tets02.dbf' size 1G reuse autoextend on next 50M maxsize unlimited default storage(initial 128k next 128k minextents maxextents unlimited);
SQL> select tablespace_name from dba_tablespaces ## 查看所有表空间,看看是否有刚才创建的
SQL> create user test01 identified by testpasswd default tablespace TEST temporary tablespace TEMP; ## 创建用户,test01,密码:testpass,设置默认表空间为刚才创建的 test, 临时表空间设为默认的 TEMP。
SQL> select username from dba_users ## 查看用户名,可以看到是否有刚才我们创建的用户名
SQL> grant connect,dba,exp_full_database,imp_full_database to test01 with admin option; ## 授权用户 test01,拥有连接,管理员,导入,导出权限,并可以传递权限。(根据需求自己定义权限)

8. 导入数据,导出数据:

  还记得之前自定义的directory文件目录吗?第6步中设置的。 只需要将需要导入的数据文件,放入这个目录。就可以使用 impdp命令导入数据了。用expdp命令导出的数据,也可以设置放在此文件目录中,由于这个目录是最初从宿主机上挂载来的,所以,这些导入导出的数据,将不会随容器关闭而丢失,可以持久化保存数据。
  导出命令如下,注意这里操作的时候要退出sqlplus,回到oracle用户下操作:

## 导入数据,登陆用户为刚才创建的用户,实例为镜像的实例helowin,数据文件为第6步创建的DATA_TEMP,导入文件为BPM.EXPDP,用户为test01到test01,这些需要自行修改,导入的用户和当时导出的用户最好保持一直。
impdp test01/testpasswd@helowin table_exists_action=replace directory=DATA_TEMP dumpfile=BPM.EXPDP logfile=BPM_20180124.log REMAP_SCHEMA=test01:test01 schemas=test01
## 导出数据,导出文件名为:BPM.EXPDP, 路径为: DATA_TEMP, 用户为test01
expdp test01/testpasswd@helowin dumpfile=BPM.EXPDP directory=DATA_TEMP schemas=test01 reuse_dumpfiles=y version=11.2.0.1.

9. 了解了导入导出后,就可以写一个简单的导出数据的脚本,设置定时任务,作为数据备份。

  简单的备份数据的脚本如下:

#! /usr/bin/python

import datetime
import os
import re back_dir = '/home/oracle/data_temp'
today = datetime.datetime.today().strftime('%Y-%m-%d')
command = 'source /home/oracle/.bash_profile && expdp bpm/bpm@helowin dumpfile=bb
pmxk_%s.expdp directory=DATA_TEMP schemas=bpm reuse_dumpfiles=y version=11.2.0.11
.' %today
os.system(command) dirlist = os.listdir(back_dir)
for dirname in dirlist:
    if 'bpmxk' in dirname:
        time1 = re.findall('bpmxk_(.*?).expdp',dirname)[]
        time2 = datetime.datetime.strptime(time1,'%Y-%m-%d')
        time_diff = datetime.datetime.today() - time2
        if time_diff.days > :
            os.remove(back_dir+'\\'+dirname)

然后设置定时任务,进入root账号操作,此镜像的root密码为:helowin。

vi /etc/crontab      ## 编辑定时任务配置文件,添加下面一行

*  * * * root /home/oracle/oracle_backup.sh      ## 每天凌晨3点自行备份脚本

chmod  /home/oracle/oracle_backup.sh           ## 给备份脚本可执行授权
service crond start ## 启动crond服务,默认是没有启动的。

  OK。到此。便全部完成了。此只是做了一个简单的备份,如何需要将所有数据文件都持久化,就需要在创建容器的时候,挂载一个存放表空间数据文件的目录到容器内,然后在创建表空间的时候,再创建一个临时表空间,将数据文件都放入挂载的目录。这样存放的数据文件就能可以持久化了。避免数据的丢失。

  如果有什么写错的,或者不明白的地方,欢迎指正

centOS7docker安装oracle的更多相关文章

  1. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  2. 在Ubuntu和Linux Mint上安装Oracle JDK

    在Ubuntu和Linux Mint上安装Oracle JDK 使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好: sudo add-apt-repository ...

  3. linux下安装 oracle 11g

    oracle 11g安装 一.环境准备 划分区 / 15000M /tmp 4096M /boot 100M Swap 4096M /u01 剩余空间 2.更改主机名,ip地址 3.安装软件包 那么l ...

  4. 手动安装Oracle的Maven依赖

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 环境:win7 + Orac ...

  5. Windows下安装Oracle拖慢开机速度的解决方法

    环境:win7 + oracle R2 方法:将安装Oracle后自动开机启动的服务改为手动启动 步骤如下: 1.修改服务项 Ctrl + R,输入services.msc,打开服务列表,找到Orac ...

  6. 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具

    Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老手,有时候安装起来也觉得挺烦.而工作中,通常服务器上面安装oracle就可以了,我们本地电脑 ...

  7. CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  8. linux 之静默安装oracle

    Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装.即在没有图形界面的Li ...

  9. 安装oracle

    1.安装vnc  yum install tigervnc tigervnc-server 2.vncserver启动 3.安装依赖库 yum install -y compat-libstdc*   ...

随机推荐

  1. TCP首部

    TCP的首部格式 字段解释 源端口和目的端口 用于多路复用/分解来自或送到上层应用的数据 数据偏移 TCP中数据的开始处距离TCP报文段的起始位置有多远 == TCP报文段的首部长度 表示长度以32位 ...

  2. 第8章 CentOS包管理详解

    8.1 Linux上构建C程序的过程 在说明包相关的内容之前,我觉得有必要说一下在Linux上构建一个C程序的过程.我个人并没有学习过C,内容总结自网上,所以可能显得很小白,而且也并非一定正确,只希望 ...

  3. bash内置命令mapfile:读取文件内容到数组

    bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...

  4. Python丢弃返回值

    函数多个返回值 python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全等价的. def f(): return 1,2 def f(): retu ...

  5. Flask入门第二天

    一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或稍微工作是需要处理的,比如:在请求开始时,建立数据库连接:在请求开始时,根据需求进行权限校验:在请求结束时,指定数据的交互格式等.为了让每个视 ...

  6. SpringBoot解决ajax跨域问题

    一.第一种方式: 1.编写一个支持跨域请求的 Configuration import org.springframework.context.annotation.Configuration; im ...

  7. SQL语句在数据库中可以执行在mybatis执行不了

    这个问题竟然纠结了半个小时! 就问题而言,肯定是出在mybatis中 终于,找到了答案, 原来是DataSource配置问题, 我将配置连接池的数据写到了文件db.properties中, SqlMa ...

  8. JS隐藏号码中间4位

    function resetPhone(phone) { var str = String(phone) var len = str.length; var prev,next; if (len &g ...

  9. 设置dataGridView单元格颜色、字体、ToolTip、字体颜色

    this.dataGridView3.Rows[e.RowIndex].Cells["你的那个要判断的列名"].Style.BackColor = Color.MediumPurp ...

  10. Python 执行 mysql 存储过程

    mysql 创建简单的临时表 tmp create database test; use test; DROP TABLE IF EXISTS `tmp`; CREATE TABLE `tmp` ( ...