🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

10829閲覧

DBスキーマの中身(オブジェクトとデータ)のみを削除する方法【Oracle】

urozero

総合スコア21

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/03/18 05:34

編集2021/03/19 05:52

お世話になっております。
###現状
Oracle 19cでDBスキーマを作成し、dmpファイルをインポートしてデータを格納した状態です。

###実現したい事
作成したDBスキーマは保持したまま、データの中身のみを削除して再びdmpファイルのインポートによってデータを格納したいです。
オブジェクト(テーブル、ビューなど)、データ(ColumnとRow?)のみを削除したいです。

イメージとしては、TRUNCATE TABLE文でテーブルの中身のみを削除するのと同じ感じです。
調べた結果、そもそも可能なのか、コマンドで実行するのか、またはDBCAなどで可能なのか判断がつかなかったため、方法をご教授頂ければと思います。

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

###補足情報
削除実行端末OS:
・Windows Server2019 Standard Evaluation
・Windows Server2008 R2 Standard

###追記情報
・実行予定のインポート文になります。
impdp XXXADMIN/********@YYDB schemas=XXXADMIN directories-=DATA_PUMP_DIR dumpfile=XXX.DMP logfile=IMP_XXX.LOG

・DATA_PUMP_DIRのパス
D:\app\Administrator/admin/XXDB/dpdump/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2021/03/18 09:16

パスワードは xxxxxx で隠すとして、現行のimpdpの内容くらい質問に追記しなくちゃ。
urozero

2021/03/19 04:44

失礼しました。追記します。
guest

回答1

0

ベストアンサー

ユーザーをDROPして作り直す。ではダメだという事ですかね?

地道にやるならdmpをエクスポートした時のログファイルから
テーブル名やビュー名を書き写して、DROPしてあげるスクリプトを1本作っておくと
同じことを繰り返す場合に便利に使えると思います。

USER_OBJECTSというテーブルから、そのユーザーが保持しているオブジェクトを取得できます。
SELECT 'DROP ' || OBJECT_TYPE || ' ' || OBJECT_NAME FROM USER_OBJECTS;
こんなSQLで、文字列作って、PL/SQLのEXECUTE IMMEDIATEで回してあげれば良いと思いますが
Tableを消した後でindexを消そうするとエラーになる。とか、
Packageを消した後でPackage Bodyを消そうとするとエラーになる。とかあるので
お勧め出来ないかと

脱字修正しました。誤字もありました。

投稿2021/03/18 09:12

編集2021/03/18 09:15
sinya0320

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

urozero

2021/03/19 04:46

ご回答ありがとうございます。 そうですね。DROPして作り直します。 自身で追加で調べた結果も踏まえ、この結論に至りました。 ありがとうございます!
urozero

2021/03/19 05:13 編集

DROP文実行に関して、追加でお聞きしたいことがあります。 【概要】 ユーザー削除ができない(ORA01918:ユーザーが存在しません) 【質問内容】・考えられる他の原因       ・有効なユーザ名の確認方法 Windows Server2019では削除完了しインポートできました。(報告遅くなりすみません) 同じ削除作業をWindows Server2008で行おうとしたところ上記エラーが発生しました。(ユーザ名が同じ想定のため、同様のDROP文を実行) 【実行文】 DROP USER XXXADMIN CASCADE; 【試したこと】 ・"ユーザ名〇"と、〇部分に半角スペース入れてDROP実行 ・SELECT * FROM DBA_USERSの実行 ・select distinct owner from all_objects order by ownerの実行 欲しい情報は得られませんでした。 以上、何卒よろしくお願いいたします。 ーー追記ーー DROPによる削除は、コマンドプロンプトのsqlplusにて 「connect / as sysdba」でログインして実施しています。
urozero

2021/03/19 06:07 編集

すみません、重要なことが記載漏れでした。 削除作業する前に、dmpファイルのエクスポートは実施できています。 expdp XXXADMIN/****@YYDB schemas=XXXADMIN directories-=DATA_PUMP_DIR dumpfile=XXX.DMP logfile=EXP_XXX.LOG それにもかかわらず、XXXADMINを削除できない理由は何か考えられるでしょうか? 【追記】 Windows Server2008のOracleバージョンは11.2.0になります
sinya0320

2021/03/19 06:26

> ・SELECT * FROM DBA_USERSの実行 > ・select distinct owner from all_objects order by ownerの実行 これらの実行結果に「XXXADMIN」は出てきますか? > ・"ユーザ名〇"と、〇部分に半角スペース入れてDROP実行 SELECT '|' || USERNAME || '|' FROM DBA_USERS; を実行して、半角スペースの数を確認してみるとか。
urozero

2021/03/19 06:35 編集

早速のご回答感謝です。 >2つのSQL文実行結果に「XXXADMIN」は出てきますか? 出てきていません。 sqlplusでログインするべきユーザがsysdbaユーザではない、という原因などになるでしょうか?
sinya0320

2021/03/19 06:39

ユーザーが存在しないので、DROPでエラーが発生しているだけでは? Win2008で、インポートは失敗するのですか? Win2019 ユーザーが存在している DROP → インポート を実行 Win2008 ユーザーが存在しない インポート を実行 と手順が異なるのでは?と予想
urozero

2021/03/19 06:50 編集

はい。その可能性は考えたのですが、「XXXADMIN」のdmpファイルのエクスポートができましたので、その可能性はなくなったと考えたのですが違うのでしょうか? expdp XXXADMIN/****@YYDB schemas=XXXADMIN directories-=DATA_PUMP_DIR dumpfile=XXX.DMP logfile=EXP_XXX.LOG ーーーー 「XXXADMIN」はスキーマであって、厳密にはユーザではない。 「XXXADMIN」スキーマを削除するには、それに紐づくDBユーザを削除しなければならない。 つまりDROP USER XXXADMIN CASCADE; は適切でない このような結論になるでしょうか? →すみません、混乱してました。expdpで「XXXADMIN」ユーザ使ってるので、消せるはずですよね。
sinya0320

2021/03/19 06:53

Win2008 エクスポート。 成功。 Win2019 ユーザー削除。 成功。 Win2019 インポート。 成功。 Win2008 ユーザー削除。 失敗。 ←今ここ。 Win2008 インポート。 という流れで良いのでしょうか?
urozero

2021/03/19 06:58 編集

はい。その通りになります。 Win2019も同様にエクスポート成功しております。 (エクスポートは3月分のバックアップの意図です。 2月末時点のdmpをインポートしようとしています)
urozero

2021/03/19 08:32

sinya0320様 同僚に教えてもらい、ObjectBrowserというツールを使い、オブジェクトを削除によって、目的は達成できました。 ご丁寧な説明と親身なご支援、感謝いたします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問