centOS7docker安装oracle
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的更多相关文章
- 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制
参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...
- 在Ubuntu和Linux Mint上安装Oracle JDK
在Ubuntu和Linux Mint上安装Oracle JDK 使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好: sudo add-apt-repository ...
- linux下安装 oracle 11g
oracle 11g安装 一.环境准备 划分区 / 15000M /tmp 4096M /boot 100M Swap 4096M /u01 剩余空间 2.更改主机名,ip地址 3.安装软件包 那么l ...
- 手动安装Oracle的Maven依赖
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 环境:win7 + Orac ...
- Windows下安装Oracle拖慢开机速度的解决方法
环境:win7 + oracle R2 方法:将安装Oracle后自动开机启动的服务改为手动启动 步骤如下: 1.修改服务项 Ctrl + R,输入services.msc,打开服务列表,找到Orac ...
- 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具
Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老手,有时候安装起来也觉得挺烦.而工作中,通常服务器上面安装oracle就可以了,我们本地电脑 ...
- CentOS安装Oracle数据库详细介绍及常见问题汇总
一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...
- linux 之静默安装oracle
Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装.即在没有图形界面的Li ...
- 安装oracle
1.安装vnc yum install tigervnc tigervnc-server 2.vncserver启动 3.安装依赖库 yum install -y compat-libstdc* ...
随机推荐
- Spring Cloud Config采用数据库存储配置内容
在之前的<Spring Cloud构建微服务架构:分布式配置中心>一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储.这一设计巧妙的利用Gi ...
- mysql数据库中的数据导入与导出
需求: 在本地电脑上的mysql中创建了一个数据库,并且在该数据库中创建了很多表,表中数据比较多: 现在想换一台电脑,但是又不想重新建数据库.建表.造数据. 解决方案: 利用mysql提供的命令,在本 ...
- iOS面试准备之思维导图
以思维导图的方式对iOS常见的面试题知识点进行梳理复习,文章xmind点这下载,文章图片太大查看不了也点这下载 你可以在公众号 五分钟学算法 获取数据结构与算法相关的内容,准备算法面试 公众号回复 g ...
- jquery获取checkbox是否选择的值
//是否被选中验证有选中的设置为true,否设置为false function myCheckbox() { flag += 1; if (flag%2 == 0){ $('#isSelf').att ...
- 前端axios下载excel,并解决axios返回header无法获取所有数据的问题
需求:通过后端接口下载excel文件,后端没有文件地址,返回二进制流文件 实现:axios(ajax类似) 主要代码: axios:设置返回数据格式为blob或者arraybuffer 如: var ...
- JQuery官方学习资料(译):遍历
一旦你通过JQuery创建了选择器,你就可以对此进行更为深入的遍历.遍历可以分为三个基本组成部分,父节点.子节点和兄弟节点.JQuery为这些部分提供了许多丰富易用的方法. <div c ...
- iframe实用操作
iframe高度设置为子页面高度 //需要使用Jquery $(document).ready(function () { parent.document.getEleme ...
- EF Codefirst 中间表(关系表)的增删改查(转)
EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD) 前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题. 本次使用订 ...
- mysql 关联查询技巧
废话不多说,直接进入正题 #数据准备 班级表class: CREATE TABLE `class` ( `class_no` ) unsigned zerofill NOT NULL AUTO_INC ...
- 新浪IP库地址
新浪IP库地址 http://int.dpool.sina.com.cn/iplookup/iplookup.php