- 環境
- Red Hat Enterprise Linux Server release 5.11 (Tikanga)
- SQL*Plus: Release 11.2.0.1.0
- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
事象 : いるはずのユーザを削除しようとすると怒られる
SQL> select distinct * from all_users where username like '%HOGE%';
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
HOGE 100 12-DEC-17
HOGEDB 99 12-DEC-17
TESTHOGEDB 121 21-APR-20
SQL> drop user testhogedb cascade;
drop user testhogedb cascade
*
ERROR at line 1:
ORA-01918: user 'TESTHOGEDB' does not exist
原因 : USERNAMEの最後に半角スペースが入っているから
ふと、思い立ってクライアントツールを使ってSQLの結果をExcelにエクスポートして、USERNAMEの値のセルをコピーしてエディタに張り付けてみた。
USERNAMEの最後に半角スペースが入っていいた・・・。
ずっとSQL*Plusで見ていたら気が付かなかった・・・。
そもそも、なぜUSERNAMEの最後に半角スペースが入っているのか?
データベースのインポートでimpdp
コマンドを使うべきところをimp
コマンドを使ってIMP-00038: Could not convert to environment character set's handleになった。
その時にimp
をimpdp
に変えただけでオプションを一切変えなかったら(アホでした)こうなったようだ・・・。
コマンドだけ変えてオプションを一切変えなかった
$ impdp ponsuke/password file=/path/to/dpdump/hogedb.dmp fromuser=hogedb touser=testhoge
対応 : 半角スペースを含めてUSERNAMEを指定して削除する
SQL> drop user "TESTHOGEDB " cascade;
User dropped.