@DIV
ユーザーが [[SELECT ANY TABLE 権限]] を持っておれば、Oracle 接続内で実行すれば
良い事なのですが、ユーザーが自分のスキーマしか見れない場合の特殊な方法です。
この方法は、Oracle の為だけにあるのでは無くいろいろな使い方ができますが、
Oracle で使う場合に注意すべき事がありますし、将来確実に動くがどうかも定かではありません
詳細な解説は後にまわすとして、実際に簡単に実現する方法から説明します。
@END
@C:red(http://winofsql.jp/VA003334/download051208135120.htm(ここから SQLの窓 Build C++)) をダウンロードします
そして、解凍して WinOfSql.exe を実行して下さい。
次に、ツールバーの「O」ボタンをクリックして、
そこにある「ODBC アドミニストレータ」ボタンをクリックして下さい
http://lightbox.cocolog-nifty.com/photos/app/odbc_admin.png
そこから、Microsoft ODBC for Oracle を使用して、DSN を二つ作成します
( 名前が二つ必要なだけなので、接続先は同じで良いです )
http://lightbox.cocolog-nifty.com/photos/app/odbc_admin_2.png
http://lightbox.cocolog-nifty.com/photos/app/odbc_admin_3.png
http://lightbox.cocolog-nifty.com/photos/app/odbc_admin_4.png
それぞれの接続を別々の二つのユーザで確認し、
さらに以下の SQL で、SELECT ANY TABLE 権限 が無い事を確認します
( ※ @C:red(どちらかに、SELECT ANY TABLE 権限 があるとエラーになります、その場合は後述する方法で実行可能です) )
@DIV
select PRIVILEGE
from USER_SYS_PRIVS
union
select PRIVILEGE
from ROLE_SYS_PRIVS
order by PRIVILEGE
@END
もし、存在したら、SYSTEM ユーザから以下の SQL で削除して下さい。
@DIV
revoke SELECT ANY TABLE from ユーザー
@END
※ ロールで付与されている場合は、ロールから削除する必要がありますが、他への影響に注意して下さい
次に、コピー元のユーザを「COPY_IN」のDSN から開いて、コピーしたいテーブルを複数選択します
http://lightbox.cocolog-nifty.com/photos/app/oracle_copy.jpg
メニューより「処理」=>「エクスポート」=>「Oracle」を選びます
http://lightbox.cocolog-nifty.com/photos/app/oracle_copy_2.jpg
@DIV
● 接続を出力先にします
( 出力先に同名テーブルがあると、追加処理用の確認ダイアログが表示されます )
● 必要であれば、チェックボックスで出力先に主キーを付加するように指示します
@END
http://lightbox.cocolog-nifty.com/photos/app/oracle_copy.png
@DIV
これで、普通のテーブルであればコピーされるたと思いますが、この方法では
テーブル作成は、SQLの窓が行っていますし、片方のユーザーまたは両方のユーザーで
SELECT ANY TABLE 権限があるとエラーになります。
[[そこで、http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view2&f=249&no=13&type=ref&opt=text-align:left;margin-left:5px;&xml=y(次のセクション)では 上記処理の 元々の SQL を書いて実行する方法を説明します]]
@END |