My開発メモ

最近の投稿

Docker上で動かしている Oracle Database 11g にデータベースをインポートする(Oracle Data Pump)

Docker上で動かしている Oracle Database 11g のバックアップをとった。

Docker上で動かしている Oracle Database 11g にあるデータベースのバックアップをとる(Oracle Data Pump)

今度はこれをインポートしてみる。

Docker環境

1) Dockerディレクトリのコピー

まず、データが空のデータベースを作成する。

Dockerのディレクトリをまるまるコピーする。

前回 Dockerのディレクトリは、~/Docker/oracle なので、

$ cp -r ~/Docker/oracle ~Docker/oracle_test

として、まるごとコピーした。

2) データを空にする。

Dockerコンテナと共有しているディレクトリのうち、バックアップ用に使っているのは、

a) oradata

b) backup

c) dump

である。

c) の dump には、前回エクスポートした大事なファイルが入っているので、これ以外の a) と b) のディレクトリの中を空にする。

3) Dockerを起動
$ docker-compose up

Dockerコンテナを作成、起動させる。

データベース・サーバーに接続して作業

1) Dockerコンテナ

まず、Dockerコンテナに入る。

$ docker exec -it oracle11a /bin/bash

今回、Dockerコンテナには 'oracle11a' という名前をつけておいた。

データベースに systemユーザーで入る。

bash-4.2# su oracle
bash-4.2$ sqlplus system/XXXXXX
SQL>
2) ユーザーの作成

mydbユーザーを作成する。各種権限もつけておく。

SQL> create user mydb identiried by "XXX";  -- パスワード
SQL> grant create session to mydb;
SQL> grant create table to mydb;
SQL> grant resource to mydb;
SQL> grant unlimited tablespace to mydb;

インポートに必要なディレクトリオブジェクトを作成する。

SQL> create directory impdp_dir as '/mnt/dump';
ディレクトリが作成されました。

今回は、インポートなので、impdp_dir というオブジェクト名にしておいた。

SQL> exit
bash-4.2$
3) インポート作業

インポートのための設定ファイルを作成する。

bash-4.2$ vim impdp_mydb.par
directory=impdp_dir
dumpfile=expdp_dump.dmp
logfile=expdp_dump.log
job_name=job_impdp

インポート実行

bash-4.2$ impdp mydb/app parfile=impdp_mydb.par

すると、以下のようなメッセージが出力されて、インポートが成功した。

Import: Release 11.2.0.2.0 - Production on 日 2月 28 17:23:01 2021

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
マスター表"MYDB"."JOB_IMPDP"は正常にロード/アンロードされました
"MYDB"."JOB_IMPDP"を起動しています: mydb/******** parfile=impdp_mydb.par 
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "MYDB"."BAK_EMP"                            7.414 KB       6行がインポートされました
. . "MYDB"."DEPT"                               5.984 KB       5行がインポートされました
. . "MYDB"."EMP"                                7.406 KB       6行がインポートされました
. . "MYDB"."EMPLOYEE"                           5.906 KB       2行がインポートされました
. . "MYDB"."MUTTER"                             6.046 KB       7行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
ジョブ"MYDB"."JOB_IMPDP"が17:23:12で正常に完了しました
4) 確認してみる

mydbユーザでデータベースにログインして、確認してみる。

bash-4.2$ sqlplus mysb/XXXX
...
SQL> select * from emp;
...
SQL> select table_name from user_tables;
...

ちゃんとデータベースがインポートされている。

Docker環境があれば、いろいろ試せて、勉強になる。

参考

カテゴリ: Oracle
タグ: Data Pump impdp バックアップ ダンプ インポート
Count: 3

エイリアスの使い方

よく忘れるので、メモ。

$ alias ll='ls -laF --color=auto'
カテゴリ: Ubuntu Linux
タグ: alias エイリアス color
Count: 2

Docker上で動かしている Oracle Database 11g にあるデータベースのバックアップをとる(Oracle Data Pump)

バックアップのとり方にはいろいろあるようで、今回は、expdpを使う。(Data Pump)

expdpは Oracle/InstantClient_21 ならクライアントプログラムに入っているが、11gは 入っていない。

おそらく、サーバー上で動作させるコマンドだからだろう。

サーバー上にダンプをとる場所を作って、そこにとることにする。

Docker環境

docker-compose.yml

version: '3'

services:
    database:
        image: oracle/database:11.2.0.2-xe
        volumes:
            - ./oradata:/u01/app/oracle/oradata
            - ./backup:/mnt/backup
            - ./dump:/mnt/dump
            - ./scripts:/u01/app/oracle/scripts
        ports:
            - 1521:1521
        container_name: docker-oracle11
        shm_size: '1gb'
        environment:
            - ORACLE_PWD=manager
            - TZ=Asia/Tokyo
            - NLS_LANG=Japanese_Japan.AL32UTF8

Docker上の /mnt/dump を、ローカルの ./dump に共有している。

作業開始

Dockerに接続

以下の状態。

$ docker-compose ps
     Name                Command              State               Ports         
--------------------------------------------------------------------------------
docker-oracle11   /bin/sh -c exec          Up (healthy)   0.0.0.0:1521->1521/tcp
                  $ORACLE_BA ...           

Dockerに入る。

$ docker exec -it docker-oracle11 /bin/bash
bash-4.2#

vim が必要なので、インストールする。

bash-4.2# yum install -y vim

ダンプファイルを作成するディレクトリのアクアス権限を確認する。

bash-4.2# ls -laF /mnt
drwxrwxr-x 2 oracle dba  4096 Feb 28 10:40 dump/
Oracleユーザーになる

Oracleデータベースに接続するためには、oracleユーザーになる必要がある。

bash-4.2# su oracle
bash-4.2$ cd
bash-4.2$ pwd
/u01/app/oracle

以下の内容で、expdp_mydb.parというファイルを作っておく。

$ vim expdp_mydb.par
directory=expdp_dir
dumpfile=expdp_dump.dmp
logfile=expdp_dump.log
job_name=job_expdp
Oracleデータベースにsysユーザーでログイン

sysユーザーでログインする。

$ sqlplus / as sysdba

ディレクトリ・オブジェクトを作成し、そのパスを実際のディレクトリに紐付ける。

SQL> create directory expdp_dir as '/mnt/dump';
ディレクトリが作成されました。

(注)

もし、なんらかの事情で、ディレクトリのパスを変更したい場合は、以下のようにする。

    SQL> create or replace directory expdp_dir as '/mnt/dump';
    ディレクトリが作成されました。

データベースのユーザーに権限を与える。

今回の場合は、mydbユーザーでデータベースを作成している。

SQL> grant read,write on directory expdp_dir to mydb;
権限付与が成功しました。

確認してみる。

SQL> select directory_name, directory_path from dba_directories
  2  where directory_name like 'EXPDP%';

DIRECTORY_NAME
------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
EXPDP_DIR
/mnt/dump

SQL> exit

oracleユーザーに切り替わり、ダンプをとる。

ここからは OracleユーザーでDocker上での作業である。

再確認。

$ cat expdp_mydb.par
directory=expdp_dir
dumpfile=expdp_dump.dmp
logfile=expdp_dump.log
job_name=job_expdp

expdpコマンドを実行する。

bash-4.2$ expdp mydb/app parfile=expdp_mydb.par

以下のように出力された。

Export: Release 11.2.0.2.0 - Production on 日 2月 28 10:33:05 2021

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
"MYDB"."JOB_EXPDP"を起動しています: mydb/******** parfile=expdp_mydb.par 
BLOCKSメソッドを使用して見積り中です...
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
BLOCKSメソッドを使用した見積り合計: 320 KB
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/COMMENTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
. . "MYDB"."BAK_EMP"                            7.414 KB       6行がエクスポートされました
. . "MYDB"."DEPT"                               5.984 KB       5行がエクスポートされました
. . "MYDB"."EMP"                                7.406 KB       6行がエクスポートされました
. . "MYDB"."EMPLOYEE"                           5.906 KB       2行がエクスポートされました
. . "MYDB"."MUTTER"                             6.046 KB       7行がエクスポートされました
マスター表"MYDB"."JOB_EXPDP"は正常にロード/アンロードされました
******************************************************************************
MYDB.JOB_EXPDPに設定されたダンプ・ファイルは次のとおりです:
  /mnt/dump/expdp_dump.dmp
ジョブ"MYDB"."JOB_EXPDP"が10:33:28で正常に完了しました

Dockerから抜けて、dumpディレクトリを見てみる。

bash-4.2$ exit
bash-4.2# exit
$ ls -l ./dump
-rw-r----- 1 <user> <group> 233472  2月 28 10:33 expdp_dump.dmp
-rw-r--r-- 1 <user> <group>   1913  2月 28 10:33 expdp_dump.log

2つのファイルができている。

dmpファイルは、バイナリファイルである。

logファイルは、テキストファイルである。

参考

カテゴリ: Oracle
タグ: Data Pump expdp バックアップ ダンプ
Count: 7