今だけ人気マンガ100円レンタル特集♪

こんばんは。

exportしたダンプファイルを頂いたので
oracleにimportしようと思っています。
色々調べて以下のようにわかったのですが、
間違っていないか、パラメータで追加した方が
よいものがあれば、ご指摘お願いします。

1)
既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。既存のテーブルデータは新しくimportするもので更新されている???

2)
SQL*PLUSでコマンドを叩く。
コマンド内容は以下の通り。
imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log

test1 ← DBA権限あり。
test2 ← このユーザーの表領域にデータを作成したい。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>上記オプションで、既存のテーブルは古いデータが削除され、



ignore=yにしてもimpコマンドではデータの削除は行われません。
一意制約違反となります。
あらかじめ不要なデータは消しておきましょう。

truncate table テーブル名;
でデータを切り捨てるのがいいかと。


>新規に増えたテーブルは
>新規に作成(データ込み)と考えて正しいでしょうか?

はい。こちらはこうです。
    • good
    • 3
この回答へのお礼

お返事が遅くなってすいません。

アドバイス頂いたおかげで、成功しました。
ありがとうございました。

お礼日時:2004/09/07 05:43

>1)


>既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。
>既存のテーブルデータは新しくimportするもので更新されている???

一意制約違反でエラーとなるでしょう。
あらかじめテーブルをdropしてあった場合は、インポート時にcreateされますが、レイアウトが違う場合は注意が必要です。

>2)
>SQL*PLUSでコマンドを叩く。
>コマンド内容は以下の通り。
>imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log

impはSQL*Plusのコマンドではありません。外部コマンドです。
Windowsであれば、コマンドプロンプトから実行してください。

テーブルをあらかじめdropしておかないのであれば、ignore=yを追加してください。

>大量の表がある場合、どのようにして削除するのが
>よいでしょうか?

drop table テーブル名1;
drop table テーブル名2;


と記述したテキストファイルを準備し、
SQL*Plusでファイル名を指定して実行すればよろしいかと。


>olacle7は間違いなく使えません。

使用可能なオプションは、
imp ユーザ名/パスワード help=y
で表示されます。確認してください。

この回答への補足

ありがとうございます。

>テーブルをあらかじめdropしておかないのであれば、
>ignore=yを追加してください。

上記のオプションを見てみたのですが、処理が続行される
ことは分かりました。
やりたいこととしては、大量のテーブル&データがある状態で、最新のものを頂いたので、最新の状態にしたいと
思っています。

既存のテーブルも大量にあり、新規のものが少し混ざった
状態です。上記オプションで、既存のテーブルは古いデータが削除され、新しいデータが入った状態となり、新規に増えたテーブルは
新規に作成(データ込み)と考えて正しいでしょうか?

補足日時:2004/09/02 10:34
    • good
    • 0

1)


更新されずにエラーになると思います。
中身はInsert文なので。

2)
olacleはtouser使えたっけ?
olacle7は間違いなく使えません。

この回答への補足

まず、表を削除しないといけないのですね。
この場合、test2のユーザーのスキーマに作成
されている表を削除することになると思うのですが、
大量の表がある場合、どのようにして削除するのが
よいでしょうか?

補足日時:2004/09/02 07:29
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q既にテーブルが存在する場合のインポート

インポート対象のテーブルが既に存在する場合、次のエラーが発生します。

IMP-00015: オブジェクトがすでに存在するため次の文は失敗しました:
"CREATE TABLE ...

SQL Loaderではデータにスペースや改行が含まれているとdatの作成がめんどうですし、dmpファイルでcreate文を削除するようなこともできればしたくありません。

データを追記したいのでテーブルを削除せずにインポートしたいのですが、どうすればよいでしょうか?

Aベストアンサー

参考URLの内容はどうでしょうか?

参考URL:http://www2.odn.ne.jp/~cag07740/tech_info/oracle_ans7.html

QOracleで上書きImportはできますか?

DBサーバーA(以下A)のデータを毎月Exportし、DBサーバーB(以下B)にImportしていきます。
二回目以降は先月のImportでBにはAと同じテーブル定義がされています。
二回目以降にBの定義(データも含め)を削除せずにAのデータを追加及び上書きしたいのですが増分Expなどで出来るのでしょうか?
Oracleのバージョンは8.0.5.2.1です。
宜しくお願いします。

Aベストアンサー

importとSQLだけでできる方法です

1.サーバBのテーブル名を変更(たとえばTEMP_TABLE)する
2.サーバAの内容をサーバBにimportする
3.TEMP_TABLEの内容のうち、importした内容とキー重複となるレコードを相関副問い合わせのDELETE文で削除する。
4.TEMP_TABLEの内容をimportしたテーブルにinsertする
5.TEMP_TABLEをdropする

削除でロールバックセグメントがパンクしない量であればお勧めです。

Q特定のスキーマのテーブルを一括削除したい

おせわになります、

Oracleのデータベースで
特定のスキーマのテーブルを一括削除したい時の
コマンドを探しているのですが、

ひとつずつ消すのは面倒なので、一括で消したいとかんがえております。

よろしくお願いします。

Aベストアンサー

ユーザを削除する時に、同時にスキーマ内のオブジェクトを一緒に削除するという方法では駄目でしょうか?(削除後ユーザを再作成する)
この方法だと、テーブル以外のオブジェクトも削除されてしまいますが・・・。

以下の方法でユーザを削除できます(システム権限が必要です)
DROP USER ユーザ名 CASCADE;


それか、以下のSQL*PLUS、SQLコマンドをSPOOLして実行し、SPOOLされた結果を再度実行するという方法は?
SET PAGES 0
SPOOL 任意のファイル名.SQL
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM USER_TABLES;
SPOOL OFF
@任意のファイル名.SQL

QSYSユーザーでログインしたい

SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
お願いします。

Aベストアンサー

>SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
特別なことする必要がないと思います。
ログインできない場合いろいろな原因が考えられます。
一番可能な原因は設定によってSYSユーザーNOMAL権限でログインできない場合あります。
この場合
sqlplus sys/パスワード@接続文字列 as sysdba
で試してください。


>SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
conn sys/パスワード@接続文字列 as sysdba

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qtruncate文で全テーブルを一気に削除できるか?

さきほどと似たような質問ですみません。

SQLコマンドであるデータベースの全テーブルを削除したいんですが、
truncate一文ですませる方法はないでしょうか。

それとも、一行ずつ
truncate tableA
truncate tableB
....


とやっていくしかないのでしょうか?

Aベストアンサー

declare
CURSOR CUR1 IS SELECT * FROM USER_TABLES;
begin
FOR CUR_RECORD IN CUR1 LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE "'||CUR_RECORD.TABLE_NAME||'"';
END LOOP;
end;
exit
/
というPL/SQLスクリプトを投入すれば、自己所有のテーブルは空に出来ます。
有無を言わさずに空になるので、気を付けてくださいね。

Qフルインポートで警告が発生します

はじめまして。
OracleDBをfull=yでエクスポートして(壊れる前のものをエクスポートしています)
新しくDBを作成して
full=yでインポートすると警告が多数発生します。

以下の通りにバッチファイルを作成して実行しています。
※exp.bat
d:\oracle\ora92\bin\exp.exe system/xxx@xxx FULL=Y STATISTICS=NONE file=e:\exp.dmp log=e:\exp.log

※imp.bat
D:\oracle\ora92\bin\imp.exe system/xxx@xxx commit=y IGNORE=y full=y file=e:\exp.dmp log=e:\imp.log

上記を実行すると下記の警告が複数発生します。
IMP-00017: 次の文は、Oracleエラー1919で失敗しました:
IMP-00003: Oracleエラー1919が発生しました。
ORA-01919: ロール'SYS'は存在しません
ORA-06512: "SYS.DBMS_RMIN", 行56
IMP-00061: 警告: オブジェクト型"SYSTEM"."REPCAT$_OBJECT_NULL_VECTOR"は、別の識別子ですでに存在します
IMP-00019: Oracleエラー1により、行のインポートは拒否されました
IMP-00003: Oracleエラー1が発生しました。
ORA-00001: 一意制約(SYSTEM.HELP_TOPIC_SEQ)に反しています

OracleDBが壊れてしまい、戻そうとしても警告が出るので
現在はシステムバックアップを戻して対処しています。
出来れば、フルインポートでOracleを元に戻したいのです。
ご存知の方ご教示頂けないでしょうか。宜しくお願いします。

はじめまして。
OracleDBをfull=yでエクスポートして(壊れる前のものをエクスポートしています)
新しくDBを作成して
full=yでインポートすると警告が多数発生します。

以下の通りにバッチファイルを作成して実行しています。
※exp.bat
d:\oracle\ora92\bin\exp.exe system/xxx@xxx FULL=Y STATISTICS=NONE file=e:\exp.dmp log=e:\exp.log

※imp.bat
D:\oracle\ora92\bin\imp.exe system/xxx@xxx commit=y IGNORE=y full=y file=e:\exp.dmp log=e:\imp.log

上記を実行すると下記の警告が複数発生...続きを読む

Aベストアンサー

IMPの起動は、インスタンスを新規作成の状態で、ユーザのTableSpaceの作成後、ユーザ作成、そしてインポートの実行をしていますか。
例えば毎日データがエントリーされるOracleのEXPファイルを昨日取得しものを今日そのままIMPするとレコードが存在するので。
一意制約のエラーが出ます。(IGNORE=Y)で無視されますが。
DB全体なので各アカウントのオブジェクトを削除した状態で行ってみて下さい。
その他IMPの実行には
(1)catexp.sqlかcatlog.sqlの実行。
(2)アカウントにDBA権限が必要。
それと全データの場合SYSユーザのトリガはインポート
されませんのでご注意を。
今のダンプファイルより戻したいのであれば。
各アカウント毎にユーザ単位でのインポートは可能では。
systemやsysにユーザテーブル等を作成されていますか。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング