카테고리 보관물: Sql

sql

Oracle 11gR2에서 구체화 된 뷰를 생성 한 동일한 사용자로 삭제할 수없는 이유는 무엇입니까? object_type, owner

DI_TEST_AL사용자 와 함께 구체화 된 뷰를 만들었 습니다 MY_MVIEW. 이름을 지정하겠습니다 . USER_OBJECTS테이블에로 표시되고 MATERIALIZED VIEW삭제하려고하면 성공 메시지가 표시되지만 개체가 여전히 있습니다. 실제로 다시 만들려고하면 “object already exist”와 같은 오류가 발생합니다.

다른 스키마에 속하는 동일한 이름의 테이블이 있음을 알았습니다. 나는 그것이 문제를 일으키지 않아야한다고 생각하지만, 언급하는 것처럼 느꼈다.

다음은 SQL * Plus 출력입니다.

SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 17:01:50 2011

SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';  
OBJECT_NAME OBJECT_TYPE       OWNER
----------- ----------------- ----------
MY_MVIEW    MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW    TABLE             DIDEV11

SQL> DROP MATERIALIZED VIEW MY_MVIEW;
Materialized view dropped.

SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';
OBJECT_NAME OBJECT_TYPE       OWNER
----------- ----------------- ----------
MY_MVIEW    MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW    TABLE             DIDEV11

SQL> 

내 권한을 두 번 확인 DROP ALL MATERIALIZED VIEWS했으며 DI_TEST_AL사용자 에게 부여되었습니다 .



답변

sysdba로 연결하고 MV에 대한 dba_summaries에 전체가 있는지 확인하십시오. 달리면

drop summary <OWNER>.<MV_NAME>;`

답변

구체화 된 뷰를 삭제하려고 할 때 비슷한 문제가 발생했습니다. 그것을 만들려고하면 이름이 이미 존재합니다. 이것은 Oracle의 버그입니다.

보기를 삭제하기 전에 all_objects 테이블에서 조회하십시오.

SQL : SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = ‘MY_MVIEW’; ojbect_type = TABLE 및 Object_type = MATERIALIZED VIEW라는 두 개의 레코드를 반환해야합니다.

그러나 Object_type = Table 인 레코드가 하나만 표시되면 데이터베이스에서 해당 테이블을 삭제하십시오.

드롭 테이블 MY_MVIEW;

구체화 된 뷰를 다시 만들어보십시오. 작동해야합니다.


답변