■SI Object Browser 掲示板
|
ユーザの皆様、開発者、サポート担当者の交流のための掲示板です! ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。 なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。 |
|
| ※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】 ※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。 ※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。 ※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。 | |
テーブルの複製、およびデータ取込について
2022/10/31 14:55
OB
4
K
テーブルの複製、およびデータ取込について質問です。
初めてこちらの掲示板を使用して質問します。
至らぬ点等あるかもしれませんが、解決策についてご教示いただければ幸いです。
【Object Browser情報】
OBの製品名 :SI Object Browser for Oracle 21
OBバージョン :21.1.0.0
OBエディション :通常版
●要望
①既存テーブルのバックアップ作成
②既存テーブルのコピーを作成、既存テーブルと入れ替えて使用
例)実績結果(テーブル名)
①テーブルのコピー
②テーブルの貼り付け
③実績結果の名前を変更「実績結果_BK」
④貼り付けしたテーブルの名前を「実績結果」として使用したい。
●要望②
既存テーブルのデータ件数が約50,000レコードあります。
バックアップ後に入れ替えたテーブルで項目の型を変更したいです。
既存データがあると型の変更ができないので、中身を一度csv等で出力して退避、
型の変換後にcsvデータを取り込みたいと思っています。
Object Browserで上記のような対応はできますでしょうか。
または、SQLplus等でやる場合はどのような対応をすればできますでしょうか。
●対応案
Object Browser内の機能のExport、Import、ロードを使用しようかと思いましたが、
フォルダ内に使用ツールが見当たらずうまく出来ませんでした。
(expdp.exe、impdp.exe、sqlldr.exe)
●確認したフォルダ
C:\app\client\Administrator\product\12.2.0\client_1\bin
●現状のテーブルサンプル
CREATE TABLE [スキーマ名].実績結果
(
実績NO NUMBER(6,0) NOT NULL,
名称ID VARCHAR2(10) NOT NULL,
値 VARCHAR2(10) NOT NULL, ※←「値」項目の型を変更したい
日時 DATE NOT NULL,
CONSTRAINT PK_実績結果 PRIMARY KEY (実績NO, 名称ID) USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE USERS
STORAGE(INITIAL 904K NEXT 16K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
NOLOGGING
ENABLE,
CONSTRAINT FK_実績結果 FOREIGN KEY (実績NO) REFERENCES [スキーマ名].実績テーブル (実績NO) ON DELETE CASCADE,
CONSTRAINT FK_実績結果_名称 FOREIGN KEY (名称ID) REFERENCES [スキーマ名].名称マスタ (名称ID) ON DELETE CASCADE
)
初めてこちらの掲示板を使用して質問します。
至らぬ点等あるかもしれませんが、解決策についてご教示いただければ幸いです。
【Object Browser情報】
OBの製品名 :SI Object Browser for Oracle 21
OBバージョン :21.1.0.0
OBエディション :通常版
●要望
①既存テーブルのバックアップ作成
②既存テーブルのコピーを作成、既存テーブルと入れ替えて使用
例)実績結果(テーブル名)
①テーブルのコピー
②テーブルの貼り付け
③実績結果の名前を変更「実績結果_BK」
④貼り付けしたテーブルの名前を「実績結果」として使用したい。
●要望②
既存テーブルのデータ件数が約50,000レコードあります。
バックアップ後に入れ替えたテーブルで項目の型を変更したいです。
既存データがあると型の変更ができないので、中身を一度csv等で出力して退避、
型の変換後にcsvデータを取り込みたいと思っています。
Object Browserで上記のような対応はできますでしょうか。
または、SQLplus等でやる場合はどのような対応をすればできますでしょうか。
●対応案
Object Browser内の機能のExport、Import、ロードを使用しようかと思いましたが、
フォルダ内に使用ツールが見当たらずうまく出来ませんでした。
(expdp.exe、impdp.exe、sqlldr.exe)
●確認したフォルダ
C:\app\client\Administrator\product\12.2.0\client_1\bin
●現状のテーブルサンプル
CREATE TABLE [スキーマ名].実績結果
(
実績NO NUMBER(6,0) NOT NULL,
名称ID VARCHAR2(10) NOT NULL,
値 VARCHAR2(10) NOT NULL, ※←「値」項目の型を変更したい
日時 DATE NOT NULL,
CONSTRAINT PK_実績結果 PRIMARY KEY (実績NO, 名称ID) USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE USERS
STORAGE(INITIAL 904K NEXT 16K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
NOLOGGING
ENABLE,
CONSTRAINT FK_実績結果 FOREIGN KEY (実績NO) REFERENCES [スキーマ名].実績テーブル (実績NO) ON DELETE CASCADE,
CONSTRAINT FK_実績結果_名称 FOREIGN KEY (名称ID) REFERENCES [スキーマ名].名称マスタ (名称ID) ON DELETE CASCADE
)
返信を投稿
OB
OBサポート
OBサポートです。
■テーブルをコピーした上での定義変更について
お問い合わせ頂いた内容につきましては、下記方法で実現可能と考えられます。
例①)テーブルの定義のみをコピーして定義変更後にinsert ~ select を実施する方法
1. SI Object Browserのテーブルリスト上で既存のテーブルをリネームします。
⇒今回のケースでは、はじめに「実績結果_BK」などにリネームを実施する
2. その後、リネームしたテーブルを選択し、
ショートカットもしくは右クリック > 「コピー」からオブジェクトのコピーを行います。
⇒コピー後、同じテーブルリストの画面上へ貼り付けを行います。
この時
・インデックスを含める
・テーブルデータを含める
のチェックははずしてください。
また、テーブル名についても変更を行ってください。(元の「実績結果」へ変更しておく)
3. 空のテーブルの定義を変更後、SQL実行画面からinsert ~ select文によるデータ追加を実行する
2.までの手順で作成されたテーブルに対してSQL実行画面よりinsert ~ select 文を実行することで、
退避しておいたテーブルから新規に作成したテーブルへデータを移行することが可能です。
この際に、データの互換性を考慮する必要がある場合には、
適宜selectする各列についてcastを行ってください。
例②)単純にテーブルコピーを行って定義変更する
もし例①が可能であれば、既存のテーブルをコピーした状態でも定義変更は可能と考えられます。
例えばvarchar2型のサイズを変えるのであれば、既存のデータで変更後の列を超過しないのであれば
変更は可能です。
また、char⇒numberについても元々あるデータを暗黙的に数値へ変更可能であれば、
同様に定義変更が可能です。
⇒こちらにつきましては、弊社側で考慮不足がある可能性がございます。
もしご利用環境で既にエラーとなり変更ができないなどであれば、
恐れ入りますが上記方法はご利用いただけません。
■imp/expユーティリティの利用について
Oracle Instant Clientをご利用の場合でもimp/expユーティリティ自体の利用は可能です。
Oracle社が提供するTools-optional packages(Data PumpやSQL*Loaderの機能を含む拡張パッケージ)を入手し、付属のexp.exeファイル等を$ORACLE_HOME\bin配下に配置することで
SI Object Browserからもご利用いただけます。
ただし、imp/expユーティリティでは既存のテーブルデータをバイナリ形式で外部ファイルに出力
⇒その後インポート先の環境に対して同じテーブルを生成(既にある場合には上書き)といった動作で
データの作成を行うため、ご要望に沿った動作とならない可能性がございます。
恐らく今回のケースであればSQL*Loaderの機能を利用する方がご要望に沿えるかと存じます。
⇒SI Object Browser側では「ロード」機能して実行いただけますが、こちらもimp/expと同様に
外部の実行ファイルが必要となります。
※なお、詳細な動作につきましては
別途Oracle Databaseの公式リファレンス等をご確認ください。
大変お手数ですが、何卒よろしくお願い申し上げます。
■テーブルをコピーした上での定義変更について
お問い合わせ頂いた内容につきましては、下記方法で実現可能と考えられます。
例①)テーブルの定義のみをコピーして定義変更後にinsert ~ select を実施する方法
1. SI Object Browserのテーブルリスト上で既存のテーブルをリネームします。
⇒今回のケースでは、はじめに「実績結果_BK」などにリネームを実施する
2. その後、リネームしたテーブルを選択し、
ショートカットもしくは右クリック > 「コピー」からオブジェクトのコピーを行います。
⇒コピー後、同じテーブルリストの画面上へ貼り付けを行います。
この時
・インデックスを含める
・テーブルデータを含める
のチェックははずしてください。
また、テーブル名についても変更を行ってください。(元の「実績結果」へ変更しておく)
3. 空のテーブルの定義を変更後、SQL実行画面からinsert ~ select文によるデータ追加を実行する
2.までの手順で作成されたテーブルに対してSQL実行画面よりinsert ~ select 文を実行することで、
退避しておいたテーブルから新規に作成したテーブルへデータを移行することが可能です。
この際に、データの互換性を考慮する必要がある場合には、
適宜selectする各列についてcastを行ってください。
例②)単純にテーブルコピーを行って定義変更する
もし例①が可能であれば、既存のテーブルをコピーした状態でも定義変更は可能と考えられます。
例えばvarchar2型のサイズを変えるのであれば、既存のデータで変更後の列を超過しないのであれば
変更は可能です。
また、char⇒numberについても元々あるデータを暗黙的に数値へ変更可能であれば、
同様に定義変更が可能です。
⇒こちらにつきましては、弊社側で考慮不足がある可能性がございます。
もしご利用環境で既にエラーとなり変更ができないなどであれば、
恐れ入りますが上記方法はご利用いただけません。
■imp/expユーティリティの利用について
Oracle Instant Clientをご利用の場合でもimp/expユーティリティ自体の利用は可能です。
Oracle社が提供するTools-optional packages(Data PumpやSQL*Loaderの機能を含む拡張パッケージ)を入手し、付属のexp.exeファイル等を$ORACLE_HOME\bin配下に配置することで
SI Object Browserからもご利用いただけます。
ただし、imp/expユーティリティでは既存のテーブルデータをバイナリ形式で外部ファイルに出力
⇒その後インポート先の環境に対して同じテーブルを生成(既にある場合には上書き)といった動作で
データの作成を行うため、ご要望に沿った動作とならない可能性がございます。
恐らく今回のケースであればSQL*Loaderの機能を利用する方がご要望に沿えるかと存じます。
⇒SI Object Browser側では「ロード」機能して実行いただけますが、こちらもimp/expと同様に
外部の実行ファイルが必要となります。
※なお、詳細な動作につきましては
別途Oracle Databaseの公式リファレンス等をご確認ください。
大変お手数ですが、何卒よろしくお願い申し上げます。
返信を投稿
OB
K
ご確認、ご回答ありがとうございます。
例②は、既存データの関係で変換が不可と判断しました。
(型がVARCHARの為、データ内に数値と文字が混在している)
例①ですが、
これは、私が既存テーブルではなく、コピー後に作成したテーブルを使用したい。
と記載した為、INSERT処理にてデータを追加する方法をご教示していただいた。
という認識で合っていますでしょうか。
対応方法を以下のようにする場合、
ご教示していただいたINSERT処理とテーブルコピー時に「テーブルデータを含める」の処理は、
同等の対応と思っていますが、INSERT処理と「テーブルデータを含める」に違いはありますでしょうか。
●対応方法
元々は、既存テーブルは変更せず、コピー後のテーブルを使用したいが、
制約も絡む為、やり方を変更することにしました。
実績結果テーブルのバックアップは、2種類のバックアップを作成。
・SQLPlusからExport処理でdmpファイルの取得。
(※万が一、テーブルが破損等してもImport処理で戻せるように)
・SI Object Browser上からテーブルのコピー。
「テーブルデータを含める」にチェックして、データのみの「実績結果_BK」テーブルの作成。
実績結果テーブルの定義構成(ソース)をコピーしておいて、既存のテーブルは削除。
その後、項目を追加、型の変更をした定義構成でCRETE文にて実績結果テーブルを作成。
CSVデータは、SQL*Loaderにて取り込むつもりです。
■imp/expユーティリティの利用について
記載してから気づいたのですが、Oracleの機能なのに質問してしまいすみませんでした。
Oracleのリファレンスを参考に必要があれば、インストールするようにします。
例②は、既存データの関係で変換が不可と判断しました。
(型がVARCHARの為、データ内に数値と文字が混在している)
例①ですが、
これは、私が既存テーブルではなく、コピー後に作成したテーブルを使用したい。
と記載した為、INSERT処理にてデータを追加する方法をご教示していただいた。
という認識で合っていますでしょうか。
対応方法を以下のようにする場合、
ご教示していただいたINSERT処理とテーブルコピー時に「テーブルデータを含める」の処理は、
同等の対応と思っていますが、INSERT処理と「テーブルデータを含める」に違いはありますでしょうか。
●対応方法
元々は、既存テーブルは変更せず、コピー後のテーブルを使用したいが、
制約も絡む為、やり方を変更することにしました。
実績結果テーブルのバックアップは、2種類のバックアップを作成。
・SQLPlusからExport処理でdmpファイルの取得。
(※万が一、テーブルが破損等してもImport処理で戻せるように)
・SI Object Browser上からテーブルのコピー。
「テーブルデータを含める」にチェックして、データのみの「実績結果_BK」テーブルの作成。
実績結果テーブルの定義構成(ソース)をコピーしておいて、既存のテーブルは削除。
その後、項目を追加、型の変更をした定義構成でCRETE文にて実績結果テーブルを作成。
CSVデータは、SQL*Loaderにて取り込むつもりです。
■imp/expユーティリティの利用について
記載してから気づいたのですが、Oracleの機能なのに質問してしまいすみませんでした。
Oracleのリファレンスを参考に必要があれば、インストールするようにします。
返信を投稿
OB
OBサポート
OBサポートです。
■例①について
例①につきましては、
・テーブルのコピー(DDLによる同じ定義のテーブルを作る)
・コピーしたテーブルの定義を変更
・後付けでデータを追加
の手順における例をご提示しておりましたが、型や既存のデータの問題で単純にinsertが行えないようであれば、こちらの方法も難しいと考えられます。
※実質 例1. 例2のどちらも同じ手順となります.
例2 につきましては例1 が可能だった場合に、より単純な方法をご提示させていただきました。
■テーブルコピー時にテーブルデータを含む設定の動作について
「テーブルデータを含める」のチェックをONの状態でコピーした際の動作と
insert~selectによるinsert処理については、ご認識の通りで同等の動作となります。
⇒どちらもinsert文による既存のデータを追加する動作となります。
■imp/expユーティリティについて
本件、外部製品となりお力添え出来ず誠に申し訳ありません。
何卒よろしくお願い申し上げます。
■例①について
例①につきましては、
・テーブルのコピー(DDLによる同じ定義のテーブルを作る)
・コピーしたテーブルの定義を変更
・後付けでデータを追加
の手順における例をご提示しておりましたが、型や既存のデータの問題で単純にinsertが行えないようであれば、こちらの方法も難しいと考えられます。
※実質 例1. 例2のどちらも同じ手順となります.
例2 につきましては例1 が可能だった場合に、より単純な方法をご提示させていただきました。
■テーブルコピー時にテーブルデータを含む設定の動作について
「テーブルデータを含める」のチェックをONの状態でコピーした際の動作と
insert~selectによるinsert処理については、ご認識の通りで同等の動作となります。
⇒どちらもinsert文による既存のデータを追加する動作となります。
■imp/expユーティリティについて
本件、外部製品となりお力添え出来ず誠に申し訳ありません。
何卒よろしくお願い申し上げます。
返信を投稿
OB
K
ご確認、ご回答ありがとうございます。
Insert処理とテーブルコピー時に「テーブルデータを含める」の動作が同じとのことでしたので、
そちらの方法でデータBKとして対応しました。
想定通りの処理が出来ましたので、解決いたしました。
ご対応ありがとうございました。
Insert処理とテーブルコピー時に「テーブルデータを含める」の動作が同じとのことでしたので、
そちらの方法でデータBKとして対応しました。
想定通りの処理が出来ましたので、解決いたしました。
ご対応ありがとうございました。
返信を投稿
OB