docker 安装oracle database 11g dmp文件导入 csv导出

一、docker安装教程很多便不赘述

二、docker导入dmp文件

1. 拉取oracle镜像,此处选取registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g镜像

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

2. 启动oracle镜像

docker images 查看已有镜像 获取容器id

启动oracle镜像

docker run -d -p 1521:1521 -v /docker-data/oracle:/data/oracle -v 如果数据大,请挂载你的数据文件夹--device-read-bps /dev/sdb:10000MB --device-write-bps /dev/sdb:10000MB --name oracle11 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

注意:如果你要处理的文件数量巨大,如200g这种规模,在此步中多加一个 -v  把你的服务器中的数据文件夹挂载到docker中。否则会导致docker容量饱满,从而功亏一篑。 

挂载了数据文件夹不需要进行下一步的拷贝了。

3.拷贝你的dmp文件到docker中

docker cp /home/xxx/data_xxx.dmp 你的镜像id:/home/data_xxx.dmp

4.进入docker容器

docker exec -it 你的镜像id bash

5.进入root用户修改profile文件

su root
password: helowin
vi /etc/profile
source /etc/profile

需要将oracle路径以及相关信息加入到你的环境变量中

将以下内容加入你的/etc/profile最后几行中

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

然后点击profile执行。 source /etc/profile

6. 回到oracle用户 su oracle

7.进入 sqlplus

注意* 此时的sqlplus是不能用backspace的,上下左右方向键也用不了,复制粘贴单行可以,多行就完蛋了,需要安装一个rlwrap插件,安装过程见下一节。

sqlplus /nolog

conn /as sysdba

sqlplus中:

create temporary tablespace TEST_DBF_TEMP tempfile '/home/oracle/data/TEST_DBF_TEMP.dbf' size 50m autoextend on next 50m maxsize 2048m;

create  tablespace TEST_DBF datafile '/home/oracle/data/TEST_DBF.dbf' size 50M autoextend on next 50m maxsize 2048m;

create user TEST identified by "123" default tablespace TEST_DBF temporary tablespace TEST_DBF_TEMP;

grant create session,connect,resource,dba to TEST;

 使用这里创建好的USER和密码进行后面的 imp 导入dmp文件

致谢:【Docker】Linux 服务器 Docker安装Oracle数据库_旋转跳跃后空翻中的阿喵 - 热爱,专注,精益求精-CSDN博客

8. 在docker中 导入dmp文件:

导入命令:

nohup imp TEST/123 file =./your_dmp_data.dmp full=y buffer= 812000000 > log.out &

我的dmp文件导入过程中需要建两个新的表空间,并且文件数量很大,需要对表空间追加数据文件,提供以下代码:

建表空间:

create  tablespace YOUR_TABLE_SPACE datafile '/home/oracle/data/YOUR_TABLE_SPACE .dbf' size 50M autoextend on next 50m maxsize unlimited;

增加数据文件:

alter tablespace YOUR_TABLE_SPACE add datafile '/home/oracle/data/YOUR_TABLE_SPACE.dbf' size 50m autoextend on next 50m maxsize unlimited;

 根据你的表大小适当增加数据文件。

Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile ‘path/file_name’ size 1024M;添加数据文件的方式就可以了。


致谢:https://www.jianshu.com/p/8ddd5e529339

如果过程中有问题需要重新导入需要删除已经创建的表空间

删除表空间:

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

停止docker

docker stop container_id

删除docker

docker rm container_name

三、安装rlwrap插件

1.安装 readline,readline-devel

先安装这readline,readline-devel两个组件,这个docker中自带了yum,但是不能安装这两个库,我们需要重新配置一下yum。

如果执行会报如下错误

[root@your_container_id oracle]# yum install readline
Loaded plugins: fastestmirror
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
 

执行以下命令

sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo

yum clean all

yum makecache

执行yum makecache时候会报错

Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify its path and try again

然后vi /etc/yum.repos.d/epel.repo 将所有enabled=1改成enabled=0

然后再执行yum makecache

此时再执行

yum install readline

yum install readline-devel

这两行代码是没有问题的啦

致谢All mirror URLs are not using ftp, http[s] or file.centos6-杂货铺-悠然小屋 安然之家 (csuper.cn)

致谢Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify its path and tr_liqi_q的博客-CSDN博客

2. 安装rlwrap插件 懒得去官网找的直接下载我的百度网盘

链接:https://pan.baidu.com/s/13pHn91yxpJj72oCFcZQtAw 
提取码:v5ps 
复制这段内容后打开百度网盘手机App,操作更方便哦

把插件传到docker里面然后执行以下命令

tar -zxf rlwrap-0.37.tar.gz
cd rlwrap-0.37
./configure
make
make check
make install 

修改/etc/profile 文件 最后一行追加

alias sqlplus="rlwrap sqlplus"

然后使用sqlplus 就可以使用退格各种方向键随便复制粘贴了。

致谢:解决linux下使用sqlplus编辑不方便的问题_congkuzhang2348的博客-CSDN博客

linux安装rlwrap_huryer的专栏-CSDN博客

四、oracle数据库导出CSV文件

安装好rlwrap插件之后,就可以在sqlplus里面随便复制粘贴了

1. conn TEST/123 登录TEST账户(imp导入的时候用的是这个账户)

2.首先创建存储一个保存到csv的过程,如下,直接复制粘贴即可

CREATE OR REPLACE PROCEDURE SQL_TO_CSV 
(
 P_QUERY IN VARCHAR2, 
 P_DIR IN VARCHAR2,
 P_FILENAME IN VARCHAR2 
 )
 IS
  L_OUTPUT UTL_FILE.FILE_TYPE;
  L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
  L_COLUMNVALUE VARCHAR2(4000);
  L_STATUS INTEGER;
  L_COLCNT NUMBER := 0;
  L_SEPARATOR VARCHAR2(1);
  L_DESCTBL DBMS_SQL.DESC_TAB;
  P_MAX_LINESIZE NUMBER := 32000;
BEGIN
  --OPEN FILE
  L_OUTPUT := UTL_FILE.FOPEN(P_DIR, P_FILENAME, 'W', P_MAX_LINESIZE);
  --DEFINE DATE FORMAT
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';
  --OPEN CURSOR
  DBMS_SQL.PARSE(L_THECURSOR, P_QUERY, DBMS_SQL.NATIVE);
  DBMS_SQL.DESCRIBE_COLUMNS(L_THECURSOR, L_COLCNT, L_DESCTBL);
  --DUMP TABLE COLUMN NAME
  FOR I IN 1 .. L_COLCNT LOOP
    UTL_FILE.PUT(L_OUTPUT,L_SEPARATOR || '"' || L_DESCTBL(I).COL_NAME || '"'); 
    DBMS_SQL.DEFINE_COLUMN(L_THECURSOR, I, L_COLUMNVALUE, 4000);
    L_SEPARATOR := ',';
  END LOOP;
  UTL_FILE.NEW_LINE(L_OUTPUT); 
  --EXECUTE THE QUERY STATEMENT
  L_STATUS := DBMS_SQL.EXECUTE(L_THECURSOR);

  --DUMP TABLE COLUMN VALUE
  WHILE (DBMS_SQL.FETCH_ROWS(L_THECURSOR) > 0) LOOP
    L_SEPARATOR := '';
    FOR I IN 1 .. L_COLCNT LOOP
      DBMS_SQL.COLUMN_VALUE(L_THECURSOR, I, L_COLUMNVALUE);
      UTL_FILE.PUT(L_OUTPUT,
                  L_SEPARATOR || '"' ||
                  TRIM(BOTH ' ' FROM REPLACE(L_COLUMNVALUE, '"', '""')) || '"');
      L_SEPARATOR := ',';
    END LOOP;
    UTL_FILE.NEW_LINE(L_OUTPUT);
  END LOOP;
  --CLOSE CURSOR
  DBMS_SQL.CLOSE_CURSOR(L_THECURSOR);
  --CLOSE FILE
  UTL_FILE.FCLOSE(L_OUTPUT);
EXCEPTION
  WHEN OTHERS THEN
    RAISE;
END;
/

3.保存到csv 执行以下代码

create or replace directory OUT_PATH as '/home/';
EXEC SQL_TO_CSV('select * from your_table_name','OUT_PATH','your_output_Filename.csv');

大功告成!

致谢: oracle导出数据到 csv文件方法整理_捉到一只萤火虫的博客-CSDN博客

任何问题欢迎留言讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值