- PR -

エクスポート/インポートを利用してのDBの複製

投稿者投稿内容
ばね
会議室デビュー日: 2005/04/28
投稿数: 5
投稿日時: 2005-04-28 11:55
はじめまして。

同じ構成のサーバが2台あり、
データベース全体のエクスポート/インポートを利用して
同じ環境のDBを構築しようとしています。
ひとまず、うまくいった風(あくまで風!)なのですが、
不安が残ります。

その際の手順として、以下の通りで行いましたが、
1)同じバージョンのオラクルをインストール
2)データベースインスタンスを作成
3)データベースの作成
4)インポート

3)データベースの作成 
との点で、実作業としてどこまで必要だったのか
いまいち分かりませんでした。
(もしかして、データベース全体をimportするのに
そんなところまで作成したら意味なしだったのか不安です)

実際、私が行った作業としては、svrmgrlより
以下のtest.sqlを実行し、

4)インポート として、
imp system/****@TEST file=D:\TESTFULL.dmp log=D:\TESTFULL.log full=y commit=y ignore=y

を実行しました。

これは正しかったんでしょうか?
どなたかご教授いただければと思います。
よろしくお願い致します。

環境:windows2000,oracle8.1.6


**test.sql内容****************

connect internal/TEST

startup nomount pfile=D:\oracle\ora81\database\TEST\initTEST.ora

create database TEST
logfile
'D:\oracle\ora81\database\TEST\rTEST01.log' size 4096K ,
'D:\oracle\ora81\database\TEST\rTEST02.log' size 4096K ,
'D:\oracle\ora81\database\TEST\rTEST03.log' size 4096K ,
'D:\oracle\ora81\database\TEST\rTEST04.log' size 4096K
datafile
'D:\oracle\ora81\database\TEST\sysTEST.dbf' size 256M
character set JA16SJIS ;

connect internal/TEST

-- データディクショナリビュー.パブリック.シノニム作成
@D:\oracle\ora81\rdbms\admin\catalog.sql

-- プロシジャオプション作成
@D:\oracle\ora81\rdbms\admin\catproc.sql




エンタープライズマネージャのインポート・エクスポートウィザードを使用して
ジョブをつくり実行すると初めの1回は成功しました。
(サーバBに同じ名前のDBを作成した直後に実行)
しかし、再度ジョブを実行するとインポートの所でジョブが失敗し、
オブジェクトは既に存在するといったエラーメッセージがログに多数出てきます。

一度インポートして出来上がったDBにたいして、上書きでインポートするような
事はできないのでしょうか。

毎晩、サーバAのDBをサーバBに複製するという運用がしたいのです。

今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-28 12:56
こんにちは。

サーバAの複製をサーバBに作りたいってことですが、
サーバAのDB構成が日々変わったりするんでしょうか?

サーバAのDB構成やテーブルなど変更がなく、
保持しているデータを一致させたいというのならば、
日々の作業はデータのExport/Inportでいいと思います。

提示されたスクリプトにはCreate Database文が含まれているので、
すでにあるデータベースをまた作ろうとしているのでエラーになっているのでは
ないですか?
ばね
会議室デビュー日: 2005/04/28
投稿数: 5
投稿日時: 2005-04-28 13:54
かやさん、早速のご返答ありがとうございます。

はじめて投稿したにもかかわらず、間違った箇所が・・・。
『エンタープライズマネージャのインポート・エクスポートウィザードを使用して
・・・・』
の部分は、誤って載せてしまった文章です。この箇所は除いて考えて下さい。
大変申し訳ございません。

質問内容としましたは、
1)サーバの複製を初めて作成するときは、まずどのような手順で行うべきか。
2)また、日々の作業としては、どのようなことをして常に複製をつくっていくか。
を知りたかったのです。説明が拙くてすみません。

>サーバAの複製をサーバBに作りたいってことですが、
>サーバAのDB構成が日々変わったりするんでしょうか?
サーバAの構成は変わりません。

>サーバAのDB構成やテーブルなど変更がなく、
>保持しているデータを一致させたいというのならば、
>日々の作業はデータのExport/Inportでいいと思います。
一旦、Inportする際、既にデータが存在したりするとエラーとなりますよね。
これは事前にimportする前にuser単位などでdropしておくのが
よいのでしょうか?








今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-28 14:15
引用:

ばねさんの書き込み (2005-04-28 13:54) より:

質問内容としましたは、
1)サーバの複製を初めて作成するときは、まずどのような手順で行うべきか。
2)また、日々の作業としては、どのようなことをして常に複製をつくっていくか。
を知りたかったのです。説明が拙くてすみません。



1)に関してですが
複製の目的や複製DBの使用方法が見えないので十分な回答は出来ないのですが、
最低限テーブル構造、アクセス権限が同じものを作成していれば、
SQL発行側には負担がかからないと思います。
(まったくまんま同じにするのであれば、AのDBを構築したときと
まったく同じ手順を踏めばいいと思いますよ。)

引用:

一旦、Inportする際、既にデータが存在したりするとエラーとなりますよね。
これは事前にimportする前にuser単位などでdropしておくのが
よいのでしょうか?


Inportでのエラーとは最初に提示しているtest.sqlのスクリプトで
出ているエラーですか?
それはInportで起きたエラーではなく、
CreateDatabase文で起きたエラーだと思いますよ。
(2回目以降とおっしゃっているので)

構成が変わらないとの事なので、
日々 AからのExport → BへのInportでいいと思います。
SQL*LoaderでInportするテーブルに入っているデータをどうするか指定する
事が出来るので、テーブルデータを削除するREPLACEを指定すれば
事前作業も減ると思いますが。

(・・・ってdropってdrop tableとかじゃないですよね?)
ばね
会議室デビュー日: 2005/04/28
投稿数: 5
投稿日時: 2005-04-28 15:15
早速のご返答本当にありがとうございます。

>1)に関してですが
>複製の目的や複製DBの使用方法が見えないので十分な回答は出来ないのですが、
>最低限テーブル構造、アクセス権限が同じものを作成していれば、
>SQL発行側には負担がかからないと思います。
複製の目的と使用方法としましては、
サーバAが利用不能になったとき代替機として利用するつもりです。
現在、日々、データベース全体のexportを取っているので
それをimportすればOKという環境を作っておきたいと考えています。

>(まったくまんま同じにするのであれば、AのDBを構築したときと
>まったく同じ手順を踏めばいいと思いますよ。)
AのDBを構築した際とテーブル構造等が変化しているので
データベース全体をexportしたdumpファイルを利用したいと考えています。

>Importでのエラーとは最初に提示しているtest.sqlのスクリプトで
>出ているエラーですか?
>それはImportで起きたエラーではなく、
>CreateDatabase文で起きたエラーだと思いますよ。
>(2回目以降とおっしゃっているので)
ごめんなさい。
最初の説明で余計な箇所を載せたばかりに、誤解を招いているようです。
2回目以降importとしたときは、test.sqlは実行せず、

imp system/****@TEST file=D:\TESTFULL.dmp log=D:\TESTFULL.log full=y commit=y ignore=y

のみを実行しています。
その2回目以降のimportの際、当然のことながら、
既にほとんどのオブジェクトが存在するので、
エラーとなっています。

>構成が変わらないとの事なので、
>日々 AからのExport → BへのInportでいいと思います。
>SQL*LoaderでInportするテーブルに入っているデータをどうするか指定する
>事が出来るので、テーブルデータを削除するREPLACEを指定すれば
>事前作業も減ると思いますが。

>(・・・ってdropってdrop tableとかじゃないですよね?)
そう思っていました・・・。
SQL*Loaderにてimportする場合、
テーブル項目等が増えた場合、制御ファイルも同時に事前に修正しておく
必要があるので、それを修正し忘れたりすると復元出来なくなってしまう・・・。
と心配になったので、無駄はたくさんあっても、全データベースごと
exportしてimportとしてしまおうと考えていました。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-28 15:50
引用:

ばねさんの書き込み (2005-04-28 15:15) より:
複製の目的と使用方法としましては、
サーバAが利用不能になったとき代替機として利用するつもりです。
現在、日々、データベース全体のexportを取っているので
それをimportすればOKという環境を作っておきたいと考えています。


了解しました。

整理しましょうか。

・BはAの代替機である⇒BとAのテーブル構造、権限は同一にしておく必要がある。
・日々ExportしているAのデータをBにInportして同一データが格納されているようにしたい。
ってことですかね?

で、全データベースモードでExportしているって思い切り読み落としていました。
すみません。

全データベースモードでExportしたものをInportした経験がないので、
OTNのマニュアルから推察することしか出来ないのですが、
IGNORE=Y の指定があるのですが、DropTableはした方がいいかもしれません。
(関連するオブジェクトの権限とかが移行されないような記述が見受けられたので)



[ メッセージ編集済み 編集者: 夏椰(かや) 編集日時 2005-04-28 15:50 ]
ばね
会議室デビュー日: 2005/04/28
投稿数: 5
投稿日時: 2005-04-28 16:37
かやさんご返答、本当にありがとうございます。

>・BはAの代替機である⇒BとAのテーブル構造、権限は同一にしておく必要がある。
>・日々ExportしているAのデータをBにInportして同一データが格納されているようにしたい。
>ってことですかね?
はい、その通りです。

>全データベースモードでExportしたものをInportした経験がないので、
>OTNのマニュアルから推察することしか出来ないのですが、
>IGNORE=Y の指定があるのですが、DropTableはした方がいいかもしれません。
>(関連するオブジェクトの権限とかが移行されないような記述が見受けられたので)
drop table をする場合、全てのテーブルに対して行っておく必要がありますよね。
まるごとdrop user XXXなどで指定しておくのはまずいでしょうか?
完全復元が目的なので、負荷よりも

あと、もといで申し訳ないのですが、
全データベースモードでImportする場合は、
どこまでデータベースを構築しておく必要があるのでしょうか?

マニュアルをみると、importユーティリティを使用する前に
スクリプトcatexp.sql/catalog.sqlを実行が必要で、
『データベースを作成した後』実行して下さいとの旨が・・・。
----------------------------

さらりと書かれているが、これはどこまで作成を指すのかな?
一番最初に記載した通り、create database〜をし、
catlogの実行までが必要で正しいのでしょうか?
create database〜をする際、datafileなどを指定するので
そのファイル作成とかもimportしてくれないのかな?と。

疑問点の詳細を省略してしまい、そのため誤解を招くような
説明となってしまい、大変申し訳ないです。

よろしくお願い致します。

今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-28 16:51
ちょいとOTNの掲示板をさまよってみたら
全データベースのExport/Importの質問を見つけました。

CreateDatabase⇒catexp.sql/catalog.sql⇒Importみたいです。

表領域もオブジェクトとみなされるそうで…。

実験できる状態にないので、確実性にかけて申し訳ない。

スキルアップ/キャリアアップ(JOB@IT)