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. python闯关之路(五)前端开发

    一,HTML部分 1,XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同: XHTML 元素必须被正确地嵌套. XHTML 元素必 ...

  2. 网络爬虫之html2md

    前言 上周利用java爬取的网络文章,一直未能利用java实现html转化md,整整一周时间才得以解决. 虽然本人的博客文章数量不多,但是绝不齿于手动转换,毕竟手动转换浪费时间,把那些时间用来做些别的 ...

  3. Hive默认数据库修改配置

    此文是基于上一篇文章:Hive环境搭建及测试 因为Hive默认的数据库是derby,不支持同时开启两个./hive的命令终端: 而将Hive的默认数据库修改成mysql后,可以解决该问题. 仅在安装H ...

  4. [转] JSON Web Token in ASP.NET Web API 2 using Owin

    本文转自:http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ...

  5. SQL SERVER PIVOT与用法解释

    通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK ),I ...

  6. Android Studio 管理所有程序退出

    import android.app.Activity; import java.util.ArrayList; import java.util.List; public class fa { pu ...

  7. Java_Queue接口

    Queue接口 1.英文 a)         Queue 队列 b)         Deque ,Double ender queue缩写,双向队列 2.Queue接口 除了基本的 Collect ...

  8. Java多线程之内存可见性

    阅读本文约“3分钟” 共享变量在线程间的可见性 synchronized实现可见性 volatile实现可见性 —指令重排序 —as-if-serial语义 —volatile使用注意事项 synch ...

  9. SpringBoot 之Thymeleaf模板.

    一.前言 Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷: 1.JSP 最明显的问题在于它看起来像HTML或X ...

  10. viewer.js 视图预览demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...