オラクルの環境をコピーして全く別の所に構築する方法

このQ&Aのポイント
  • オラクルの環境を別の場所に構築する方法について説明します。ビューやファンクション、シノニムなどの実体のない物をそのままコピーする方法や、特定の件数までテーブルをコピーする方法、機密情報があるカラムのマスキング方法についても説明します。
  • オラクルの環境を別の場所に構築する方法について説明します。実体のない物(ビューやファンクション、シノニムなど)をそのままコピーする方法や、特定の件数までテーブルをコピーする方法、機密情報があるカラムのマスキング方法についても説明します。
  • オラクルの環境を別の場所に構築する方法について説明します。実体のない物(ビューやファンクション、シノニムなど)をそのままコピーする方法や、特定の件数までテーブルをコピーする方法、機密情報があるカラムのマスキング方法についても詳しく説明します。
回答を見る
  • ベストアンサー

オラクルの環境をコピーして全く別の所に構築したい

オラクルの環境をコピーして全く別の所に構築したい。 ただ、以下のような条件があります。 1.実体の無い物(ビュー、ファンクション、シノニムなど)は   そのままコピーしたい。また、Create文の情報もほしい。 2.実体のあるテーブルですが、非常に件数が多い物があります。   その為、ある特定の件数(例えばMax1000件まで)でコピーしたい。   また、Create文の情報もほしい。 3.テーブルの中身ですが、機密性の高い情報がある可能性があります。   なので、そのようなカラムにはマスキング(データ変更)したい。   そのようなカラムがどこにあるかは事前に分かりませんので、   作業中に判断しながら行っていきたい。   (作業はお客様先で、時間的な制約があります) これらを実現する為には、どのようなツールで、どのようなコマンドで 行うのが適切でしょうか?

  • Oracle
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 Create DDL については、dbms_metadata を使うと簡単に取得できます。 以下のようにすると、HOGEHOGE が所有者になっているView のCreate DDL を纏めて取得する事ができます。 後は、出力されたSQL をCopy&Paste すればOk です。 詳細は、PL/SQL Package Reference を参照して下さい。 sqlplus system/manager SQL> set pages 10000 SQL> set lines 200 SQL> set long 999999 SQL> set longchunk 999999 SQL> col sql_txt format a200 SQL> exec DBMS_METADATA.SET_FILTER(DBMS_METADATA.SESSION_TRANSFORM, SQLTERMINATOR, true); SQL> select DBMS_METADATA.GET_DDL('VIEW', view_name, owner) as sql_txt from dba_views where owner = 'HOGEHOGE'; 2 については、DB Link を作って、 Create table <Tab名> as select * from <Tab名>@dblink where rownum <= 1000 又は、Insert into <Tab名> select * from <Tab名>@dblink where rownum <= 1000 で最大1000件移行できます。 但し、LONG データ型を含んでいるテーブルについては、使用できません。 マスキングについては、Oracle Masking Pack なる製品がありますが、 有償だし、事前にマスキングパターンを登録しておくものなので お探しの者ではないと思います。 https://blogs.oracle.com/oracle4engineer/entry/post_57 データのカーディナリティ等を無視して、単純にランダムな数値/文字列 が欲しいだけであれば、dbms_random Package が使えます。 ダミーデータを大量に登録する場合は、私も良く使います。

evaag777
質問者

補足

ご解答ありがとうございました。 マスキングは難しそうですね。 イメージとしては、マスキングしながらエクスポートみたいな事が出来ればなと思います。

その他の回答 (1)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

私の勤務する会社で、協力会社に業務依頼する場合、DB環境も、相手先に贈るのですが、以下の方法で行っています。 1)本番用ユーザー全体をExportします。 2)テストユーザーAを作成し、Exportしたデータを、ユーザーAにインポートします。 3)データ件数を絞りたいテーブルは、不要なレコードを削除します。 4)ダミーデータに置換したい場合は、Update文にて個別にダミーデータに置き換えます。 5)加工が終わったユーザーAをExportします。 5)でExportしたデータを協力外医者に送付します。 ダミーデータに置き換えるべきフィールドが何か、テーブル定義書などで事前に入手できませんか? お客様での作業時間を減らすことができます。 テストユーザーAを作成することで、本番ユーザーに影響する時間の短縮になります。

evaag777
質問者

補足

ご解答ありがとうございました。 シンプルな方法ですね。 置き換えるフィールドの事前入手は可能か分かっていません。

関連するQ&A

  • Oracleのプロシージャについて

    Oracleのプロシージャについて教えてください。 現在、Aテーブル(カラム1、カラム2、カラム3、カラム4):件数40万件     Bテーブル(カラムA、カラムB、カラムC):件数50件 と言うテーブルがあります。 この中でデータ置換を行う必要があり、 Aテーブルのカラム2とBテーブルのカラムBが一致したらAテーブルの カラム3にBテーブルのカラムCで更新するプロシージャを作成しています。 通常のUpdate文で3000件単位でCommitを切るようにしていますが時間がかかります。 皆さんはこういう場合どういう手法でやられていますか? ご教授ください。 ちなみに、 サーバOS:Windows2008SERVER クライアントOS:Windows7 Oracle11 です。

  • テーブルのコピー

    myisam型のテーブルをコピーしたいんですが、テーブルをコピーする命令文はありませんか? create tabeしてカラムを作ってselectで1行ずつコピーする以外に、テーブルをそのままコピーする方法があればそちらの方法でやりたいです。

    • ベストアンサー
    • MySQL
  • Oracle 最短でわかりたい

    Oracle9iを使う事になりました。 これまではSQLServer2005、MSDEなどしか 使用していなかった為、Oracleは初めてです。 インストールしSQLプラスで接続は出来ました。 そこからcreate文でテーブルを作ってSELCTして・・・ とはなんとなく出来るのですが エンタープライズマネージャーで見ると??となります。 スキーマの考え方などがよく分かりません。 最短でOracleの考え方を理解できるサイトや資料がありましたら 教えてください。 ちなみに今は部品番号:J06245-01というPDFをみてます。

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • OracleのSQLで同テーブルのカラムをコピー

    oracle9iを使用しています。 あるテーブルに新しい列を新規追加し、そのカラムに既存列のデータをそっくりそのままコピーしたいのですが、どのようなSQLを流せばよいのでしょうか? 初心者丸出しな質問で申し訳ありませんが、ご教授頂けましたらありがたいです。 よろしくお願い致します。

  • OracleのInsert/Selectにて

    Oracle Database 11g で、対象のテーブルにInsert/Select文を実行すると、Selectの件数とInsertされた件数が違います。 制約に引っかかっている訳ではないのにこの現象が発生しており、困惑しております。 原因や解決方法がお分かりの方が居ましたら、ご教授ください。 また同じような現象が発生した方や回避方法があれば情報頂きたいです。 宜しくお願い致します。

  • MySQL show create table ~と同じOracleでのSQL文

    Mysqlでテーブルを作成するステートメントを表示するSQL文 ” SHOW CREATE TABLE テーブル名”に該当する、oracleの SQL文ってありますか?

  • Oracleのテーブル作成スクリプトを作成したい

    Oracle8i のDBA Studioで数十の表を作成したのですが、ここからテーブルの作成スクリプトを出そうとして困りました。いわゆる Create Table文なのですが、これを自動で簡単に作る方法はないでしょうか?SQL-ServerのEnterprise Managerでは、SQLスクリプトの作成があって、Create文を簡単に生成できるのですが、これと同じような感覚で、既に作成してあるテーブルのCreate文を出力する方法はないでしょうか?Oracleには、ほとんど慣れていないので、方法があると思うのですが、探し方が悪いらしく途方にくれています。どなたかよい方法を御存じないでしょうか。

  • Oracle上のテーブルからCREATE TABLE文をGenerateする方法

    Oracle上に既にあるテーブルからCREATE TABLE文を生成する方法はありますか? Oracle 10g R2 Enterprise Edition Windows 2003 Server Standard R2

  • MySQLの現存するテーブルからcreate table文を起こす方法ありますか?

    MySQLの現存するテーブルからcreate table文を起こす方法ありますか? ・お金が掛からない ・CUIベースでできる が条件です。 show full columns from テーブル名; でテーブルの情報を参照できるところまでは理解したのですが。。 showとかの特殊コマンドでなくて、管理情報のテーブル(かビュー、あるいはシノニム)に直接クエリー投げれるなら、スクリプト組めばなんとかなりそうなのですが。。

    • ベストアンサー
    • MySQL