痔になりやすい生活習慣とは?

Oracleの1スキーマの全データの入れ替えを
exp、impコマンドを使って行いたいと思っております。

その場合
1)スキーマを削除してからスキーマの再作成をしてインポート
2)スキーマ内のオブジェクトを全部削除してインポート

1と2どちらの方がよいでしょうか。
私は、1の場合、ログインしている人がいると削除できないので、
2で行おうと思っております。(テーブルにはpurgeオプションをつけて・・・)

みなさんならどちらで行いますか。
メリット・デメリットありましたら
教えていただけると助かります。

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

A 回答 (1件)

>1)スキーマを削除してからスキーマの再作成をしてインポート



この場合、削除したスキーマに対して与えられた権限も消えます。
スキーマを再作成して、権限を与えるのはモレがある可能性があります。すべてのロール、システム権限、オブジェクト権限を戻せるだけの準備が可能なら問題ないですが。

GRANTOR(権限付与を実行したユーザー名)だったら良いのですが、
GRANTEE(アクセス権を付与されたユーザー名)だったら、ユーザモードのexp/impだと、付与された権限は戻せないです。
※ユーザモードのexpファイルにはgrantした権限の「grant文」しか載りません。

以下のディクショナリから情報を抜き出しておいて前後で比較する必要があります。
xxx_sys_privs
xxx_role_privs
xxx_tab_privs

あるいは考慮しなくてもよい要件なのでしょうか。

>2)スキーマ内のオブジェクトを全部削除してインポート
スキーマ単位で考慮すべきことを考えなくてもよいので、こっちのほうが妥当かと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございますm(_ _)m
GRANTEEは消えてしまうんですね!!
-------------------------
xxx_sys_privs
xxx_role_privs
xxx_tab_privs
-------------------------
参考になりました。
無事、2の方で進め、特に問題はありませんでした(^-^)

お礼日時:2008/06/27 16:09

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

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

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

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

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

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

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

Q複数のテーブルの項目を同時に削除したい

お世話になります、
Oracleで、delete文で困っています。

関係しあう二つのテーブルtab1,tab2があります。

二つのテーブルから同時に関係する項目を削除する
場合、同時に両方のテーブルの関係する項目を削除する場合どのような文になるのでしょうか、

delete from で複数のテーブルをしてすることはできないし、

delete from (select * from tab1,tab2)というような感じでデリートしても、片方のテーブルしかデリートされません。

よろしくお願いします。

Aベストアンサー

結合VIEWで定義しておけば消せると思います。
詳しくはORACLEのマニュアルORACLE概要をご覧ください。

#バージョンに依存する機能もあるので質問の際にはバージョンも明記した方が良いと思いますよ。

Qimportについて

こんばんは。

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 ← このユーザーの表領域にデータを作成したい。

Aベストアンサー

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

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

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


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

はい。こちらはこうです。

Qdrop user できない。ORA-01940

drop user *** cascade;でユーザをドロップしようとしても、「ORA-01940: cannot drop a user that is currently connected」というメッセージが表示されて一向に削除できません。

この現象は数週間前からで、その間PCを再起動したりサービスを再起動したりしていますが一向にできません。
他のユーザは削除できました。

どうしたらよいでしょう?

Aベストアンサー

一旦データベースを停止して制限モードで再起動してみてはどうでしょう。
そうすれば勝手な接続はできないから削除できると思います。

startup restrict だったかな

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

で確認ができる。

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

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

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

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

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

Aベストアンサー

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

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

Qdatapumpの実行方法について

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

datapumpの実行方法(expdp/impdp)について、ご存知の方がいらっしゃいましたら、ご教授の程お願い致します。

------------------------------
●環境
 Oracle 11g (11.2.0.3)

以下の手順で、エクスポート/インポート テストを行ったのですが、
expdpで"tables"を指定するとエラーとなり実行できませんでした。
full=y(データベース全体)は動きました。
tablesで指定するものは、"CREATE TABLE"で作成したテーブル名ではないのでしょうか。

また、テーブルスペースを削除"drop tablespace tbl01"したのですが、
expdpでデータベース全体をエクスポートしたものから、impdpしても
削除したものが戻せませんでした。
impdpのコマンドに誤りがあるのでしょうか。


●expdp実行
-----
・tablespace作成
$ sqlplus / as sysdba
SQL> create tablespace tbl01 datafile '+data/testdb/datafile/tblsp1' size 10m autoextend off;
-----
・sequence作成
SQL> create sequence seq1;
-----
・TABLE作成
SQL> CREATE TABLE TEST_TBL(USER_ID VARCHAR2(8) NOT NULL, DEPT_NO VARCHAR2(8)) tablespace tbl01;
-----
・INSERT実行(5件分)
begin
for i in 1..5 loop
INSERT INTO TEST_TBL (USER_ID, DEPT_NO) VALUES (seq1.nextval, '1234') ;
commit;
end loop;
end;
/
-----
・expdp使用する為の準備
ディレクトリの作成と read/write 権限の付与
$ sqlplus / as sysdba
SQL> create directory expdp_dir as '/u01/tpump';
SQL> grant read,write on directory expdp_dir to system;
-----
・expdb実行
$ expdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:expdp_all.log full=y
=====
"SYSTEM"."SYS_EXPORT_FULL_01"を起動しています: system/******** dumpfile=TEST_DIR:expdp_all.dmp logfile= full=y
BLOCKSメソッドを使用して見積り中です...
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATAの処理中です
-中略-
SYSTEM.SYS_EXPORT_FULL_01に設定されたダンプ・ファイルは次のとおりです:
/u01/tpump/expdp_all.dmp
ジョブ"SYSTEM"."SYS_EXPORT_FULL_01"が11:31:19で正常に完了しました
=====

$ expdp system/pass tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile= TEST_DIR:expdp_tbl.log
=====
"SYSTEM"."SYS_EXPORT_TABLE_01"を起動しています: system/******** tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile=
BLOCKSメソッドを使用して見積り中です...
BLOCKSメソッドを使用した見積り合計: 0 KB
ORA-39166: オブジェクトSYSTEM.TEST_TBLが見つかりません。
ORA-31655: ジョブに対してデータまたはメタデータ・オブジェクトが選択されていません
ジョブ"SYSTEM"."SYS_EXPORT_TABLE_01"が完了しましたが、2エラーが11:33:54で発生しています
=====

●impdp実行
$ impdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:impdp_all.log
=====
マスター表"SYSTEM"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SYSTEM"."SYS_IMPORT_FULL_01"を起動しています: system/******** dumpfile=expdp_dir:expdp_all.dmp logfile= full=y
オブジェクト型DATABASE_EXPORT/TABLESPACEの処理中です
ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します
ORA-31684: オブジェクト型TABLESPACE:"TEMP"はすでに存在します
ORA-31684: オブジェクト型TABLESPACE:"USERS"はすでに存在します
ORA-39083: オブジェクト型TABLESPACEの作成が次のエラーで失敗しました:
ORA-01119: データベース・ファイル'+DATA/testdb/datafile/tblsp1'の作成中にエラーが発生しました。
ORA-17502: ksfdcre:4 ファイル+DATA/testdb/datafile/tblsp1の作成に失敗しました
ORA-15005: name "testdb/datafile/tblsp1" is already used by an existing alias
-中略-
※以下のORAエラーが多数発生
例:ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します
例:ORA-39151: 表"SYSTEM"."REPCAT$_PRIORITY_GROUP"が存在します。スキップのtable_exists_actionのため、すべての依存メタデータおよびデータはスキップされます
例:ORA-39111: 依存オブジェクト型OBJECT_GRANT:"SYSTEM"はスキップされ、ベース・オブジェクト型VIEW:"SYSTEM"."SCHEDULER_PROGRAM_ARGS"はすでに存在します
-中略-
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTIONの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TRIGGERの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型DATABASE_EXPORT/AUDITの処理中です
ジョブ"SYSTEM"."SYS_IMPORT_FULL_01"が完了しましたが、146エラーが20:14:48で発生しています
=====

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

datapumpの実行方法(expdp/impdp)について、ご存知の方がいらっしゃいましたら、ご教授の程お願い致します。

------------------------------
●環境
 Oracle 11g (11.2.0.3)

以下の手順で、エクスポート/インポート テストを行ったのですが、
expdpで"tables"を指定するとエラーとなり実行できませんでした。
full=y(データベース全体)は動きました。
tablesで指定するものは、"CREATE TABLE"で作成したテーブル名ではないのでしょうか。

また、テーブルスペースを削除"...続きを読む

Aベストアンサー

> SYSスキーマなどを含めてエクスポートしたいときには、
> Full=y では無理だから各スキーマ(SYS、ORDSYS等)を指定して個別で
> 行う必要があるということなのでしょうか。

SYS スキーマはシステムの持ち物なのでexp した事はありません。
その他も、Oracle Text やExpression Filter 等、Oracle の拡張機能をInstall
した際に作成されるスキーマのため、ユーザが意識的にexp/imp する事はありません。

SYSスキーマにオブジェクトを作成しなければならない理由が無いのであれば、
新しいスキーマを作成してそちらにオブジェクトを移動した方が良いです。
テーブルのデータだけで良ければ、ユーザ作成後に
Create table 新ユーザ.テーブル名 as select * from SYS.テーブル名;
とすれば、コピー可能です。

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&Aを見た人がよく見るQ&A

人気Q&Aランキング