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. 3分钟看完Java 8——史上最强Java 8新特性总结之第二篇 Stream API

    目录 · 概况 · 切片(Slicing) · 映射(Mapping) · 匹配(Matching) · 查找(Finding) · 归约(Reducing) · 排序(Sorting) · 数值流( ...

  2. Spring的@Transactional事务注意事项

    1.@Transactional应该放在方法级别,不需要使用事务的方法,就不要放置事务,2.查询方法声明不要事务,否则对性能是有影响的.3.对同一个类里的方法调用, @Transactional无效 ...

  3. 查看内置命令和非内置命令帮助的几种方法(man、help、info)

    内置命令就是shell内核自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令,我们用type命令就可以看到其的类型,内置shell命令其实 ...

  4. ubuntu16.4系统和Gentos6.8系统查看开机自启动服务

    ubuntu16.4系统查看自启服务: 需要自行安装一个sysv-rc-conf的工具来查看: sudo apt-get install sysv-rc-conf 查看自启命令: sudo sysv- ...

  5. Java线程池 Executor框架概述

    线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的 ...

  6. Spring Boot从入门到精通之:一、Spring Boot简介及快速入门

    Spring Boot Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来 ...

  7. C#设计模式之十外观模式(Facade Pattern)【结构型】

    一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...

  8. C#设计模式之十八状态模式(State Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第六个模式,该模式是[状态模式],英文名称是:State Pattern.无论是现实世界,还是面向对象的OO世界,里面都有一个东西,那就是对象.有对象当然就 ...

  9. python爬虫入门urllib库的使用

    urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print r ...

  10. Debug始于71年前

    摘要: 纪念Grace Hopper发现世界上第一个计算机BUG! 1947年9月9日,Grace Hopper的计算科学团队在哈佛的哈弗Mark II电脑运行程序时遇到一个技术故障.她在发生故障的M ...