次のクエリを実行すると:
SELECT S.OWNER AS SYN_OWNER,
S.SYNONYM_NAME AS SYN_NAME,
S.TABLE_OWNER AS OBJ_OWNER,
S.TABLE_NAME AS OBJ_NAME,
CASE
WHEN O.OWNER IS NULL
THEN 'MISSING'
ELSE O.STATUS
END AS OBJ_STATUS
FROM DBA_SYNONYMS S
LEFT JOIN DBA_OBJECTS O
ON S.TABLE_OWNER = O.OWNER
AND S.TABLE_NAME = O.OBJECT_NAME
WHERE O.OWNER IS NULL
OR O.STATUS != 'VALID';
それは私に次の出力を与えます:
PUBLIC GV$LOADPSTAT SYSTEM GV_$LOADPSTAT INVALID
PUBLIC GV$LOADISTAT SYSTEM GV_$LOADISTAT INVALID
PUBLIC V$LOADPSTAT SYSTEM V_$LOADPSTAT INVALID
PUBLIC V$LOADISTAT SYSTEM V_$LOADISTAT INVALID
PUBLIC LOADER_CONSTRAINT_INFO SYSTEM LOADER_CONSTRAINT_INFO MISSING
PUBLIC LOADER_COL_INFO SYSTEM LOADER_COL_INFO MISSING
PUBLIC GV$DB_TRANSPORTABLE_PLATFORM SYS GV$_DB_TRANSPORTABLE_PLATFORM MISSING
PUBLIC LOADER_COL_TYPE SYSTEM LOADER_COL_TYPE MISSING
PUBLIC LOADER_OID_INFO SYSTEM LOADER_OID_INFO MISSING
PUBLIC LOADER_PARAM_INFO SYSTEM LOADER_PARAM_INFO MISSING
PUBLIC LOADER_FULL_ATTR_NAME SYSTEM LOADER_FULL_ATTR_NAME MISSING
PUBLIC LOADER_INTCOL_INFO SYSTEM LOADER_INTCOL_INFO MISSING
PUBLIC LOADER_NESTED_VARRAYS SYSTEM LOADER_NESTED_VARRAYS MISSING
PUBLIC LOADER_LOB_FLAGS SYSTEM LOADER_LOB_FLAGS MISSING
PUBLIC LOADER_DIR_OBJS SYSTEM LOADER_DIR_OBJS MISSING
PUBLIC GV$SYSTEM_FIX_CONTROL SYS GV$SYSTEM_FIX_CONTROL MISSING
PUBLIC LOADER_PART_INFO SYSTEM LOADER_PART_INFO MISSING
PUBLIC LOADER_COL_FLAGS SYSTEM LOADER_COL_FLAGS MISSING
SYS DEF$_SCHEDULE SYSTEM DEF$_SCHEDULE MISSING
PUBLIC GV$TRANSPORTABLE_PLATFORM SYS GV$_TRANSPORTABLE_PLATFORM MISSING
PUBLIC LOADER_TRIGGER_INFO SYSTEM LOADER_TRIGGER_INFO MISSING
PUBLIC LOADER_TAB_INFO SYSTEM LOADER_TAB_INFO MISSING
これらを再コンパイルまたはドロップしようとすると:
ALTER PUBLIC SYNONYM GV_$LOADPSTAT COMPILE;
それは言う:
SQLエラー:ORA-01031:権限が不十分です 01031。 00000-"権限が不十分"
これはどうしてでしょうか?私はSYSTEMとしてログインしています。
落とそうとすると:
DROP PUBLIC SYNONYM GV_$LOADPSTAT;
それは言う:
SQLエラー:ORA-01432:削除するパブリックシノニムが存在しません 01432 00000-"削除するパブリックシノニムは存在しません"
クエリ結果がそれを示している場合、それはどのように存在できないのですか?
まず、DBA_SYNONYMS.SYNONYM_NAMEはシノニムの名前です。 DBA_SYNONYMS.TABLE_NAMEは、シノニムが指すオブジェクトの名前です。クエリでは、INVALID
は同義語ではなく、それが指すオブジェクトです。修正する必要があるのは同義語ではなく、オブジェクトです。
これらを再コンパイルまたはドロップしようとすると:
ALTER PUBLIC SYNONYM GV_$LOADPSTAT COMPILE;
それは言う:
SQL Error: ORA-01031: insufficient privileges
01031. 00000 - "insufficient privileges"
これはどうしてでしょうか?私はSYSTEMとしてログインしています。
それはあなたのバージョンのバグです。
落とそうとすると:
DROP PUBLIC SYNONYM GV_$LOADPSTAT; It says:
SQL Error: ORA-01432: public synonym to be dropped does not exist
01432. 00000 - "public synonym to be dropped does not exist"
クエリ結果がそれを示している場合、それはどのように存在できないのですか?
次に、シノニムの名前はGV$LOADPSTAT
。ここにオブジェクト(ビュー)をドロップしようとしています:GV_$LOADPSTAT
。そして、そのビューはSYSTEMではなくSYSが所有しています。
MISSING
が表示されている場所では、同義語は存在しないオブジェクトを指しています。オブジェクトを置き換えるか、シノニムを削除してください。