2016-08-30 2 views
2

너무 애매한 경우 사과하지만 많은 유형의 명령문에서 발생하는 임의의 문제입니다. Google 및 스택 오버플로 검색이 실패했습니다. 여기 내가 겪고있는 것이 있습니다. 나는 누군가가이 사건에 대해 보았거나 적어도 들어 봤으면하고 해결책을 알고 있기를 바랍니다.PL/SQL 개발자 문이 때때로 커밋 또는 "스틱"하지 않음

때때로 필자의 필자는 필자의 오라클 데이터베이스에 대해 PL/SQL Developer를 실행하는 문장을 "고수하지 마십시오. 지난 주에 테이블 A에 대한 업데이트, 업데이트 구문에 대한 커밋, 테이블 B에 대한 자르기, 테이블 B에 대한 삽입, 커밋 등을 수행했습니다. 내가 오류가 없었기 때문에 모든 것이 잘 작동하는 것처럼 보였다. 나는 물론 변경 내용을 쿼리하고 해당 변경 내용을 확인할 수있었습니다. 그러나 로그 아웃 한 다음 다시 로그인하면 변경 사항이 커밋되지 않았습니다. truncate 명령조차도 "갇혀"는 효과가 없었으며 자르기는 수행 할 필요가 없었습니다.

도움이 될만한 몇 가지 세부 정보 : 내 팀에서만 스키마에 대한 액세스 권한을 얻기 위해 PL/SQL을 통해 데이터베이스 서버에 로그인하고 있습니다 (각 서버의 여러 스키마, 각 스키마에는 하나의 스키마가 있음). 공유 로그인/PW). 우리 팀에 속한 12 명의 사람들 중에서, 나는이 문제를 겪고있는 유일한 사람입니다. 데이터베이스 관리팀에게 내 프로필 설정을 조사하도록 요청했으며 내 프로필이 동료들과 동일한 것처럼 보입니다. Citrix를 통해 프로덕션 데이터베이스 서버에 연결해야합니다. Citrix를 통해 언제든지 PL/SQL 인스턴스 하나만 열 수 있으므로 일반적으로 여러 스키마에 PL/SQL을 연결했지만 여러 스키마에서 동시에 SQL을 실행하지 못했습니다. 그게 가능하다면 나는 확신하지 못한다. 그러나 나는 그것을 언급 할 것이라고 생각했다. 필자는 일반적으로 PL/SQL 내에서 3-4 개의 창을 열고 각각 다른 스키마에 연결했습니다.

내 관리자는 이와 비슷한 경우에 직접 참여했습니다. 나는 4 개의 업데이트 명령을 실행하고 그 사이에 각각 하나씩 커밋했다. 그 다음에 그는 내 업데이트가 실제로 커밋되지 않았 음을 발견하기 위해서만 select 문을 실행했습니다.

내 동료 Overflowers '중 한 명이이 문제를 보거나 들었거나 적어도이 문제의 최하점에 도달하려고 시도 할 방향을 제시 할 수 있기를 바랍니다.

+0

문제의 몇 가지 예를 들려주십시오. – XING

+0

@MKowalski : PL/SQL Developer를 비난하기 전에 명령 프롬프트를 사용하여 sqlplus를 사용해 보시지 않겠습니까? –

+0

PL/SQL Developer를 (옳게 또는 잘못하여) 비난하고 사용을 계속한다면 궁극적으로 탓할 것입니다. 상위 2 개의 Oracle 개발 환경 (imo)은 [Toad] (https://software.dell.com/products/toad-for-oracle/software-downloads.aspx)와 오라클의 [SQL Developer] (http : // www .oracle.com/technetwork/developer-tools/sql-developer/overview/index.html). 무료 SQL Developer부터 시작하겠습니다. – tbone

답변

3

"내게 좋지 않은 영향을 미치고 회사의 명성에 손상을 입히기 시작했습니다."

오라클 RDBMS가 마술적이고 무작위적인 장치이거나, 더 나쁜 경우, 감정이 좋고 자신에 대한 개인적 복수를 수행한다고 믿을 수 있습니다. 컴퓨터는 악의적 인 것처럼 보일 수 있지만, 항상 우리가 그들에게 투영합니다 ;-)

명성을 훼손하는 방법은 정보에 입각 한 조사를 통해 이루어집니다. 데이터베이스는 무작위로 트랜잭션을 잃지 않습니다. 그래서, 무슨 일이 일어나고있는거야?

가능한 범인 :

  1. 트리거 : 테이블 A이 SQL의 일부를 억제하는 UPDATE 트리거가 무엇입니까?
  2. 동의어 : 테이블 AB 정말 그들이 생각하는 테이블은 무엇입니까?
  3. 소유권 : 행 수준 보안을 사용할 수있는 다른 스키마의 이러한 테이블이 있습니까 (정책 위반시 오류 메시지를 통해 그래야합니까?)?
  4. PL/SQL 개발자 구성 : IDE가 오류 메시지를 숨기고 있거나 보이지 않습니까?
  5. 개체 유형 : 테이블이 AB 실제 테이블입니까? SQL 대신 INSTEAD OF 트리거를 사용하여 뷰를 만들 수 있습니까?
  6. 오브젝트 유형 : AB을 구체화하고 세션에 QUERY_REWRITE_INTEGRITY=stale_tolerated이 있습니까?

데이터 마스커레이드, 파이프 라인 기능 및 기타 말라 키가 포함 된 유사하게 난해한 설명이있는 경우. 동료가 너를 장난 꾸러기를 가리키는 설명의 범주.

진행 방법 :

  1. 는 다른 도구를 사용해보십시오. SQL * Plus (또는 new SQL Command Line)는 다른 결과를 생성 할 수 있습니다. PL/SQL Developer를 배제하십시오.
  2. 몇 가지 테스트 사례를 작성하십시오. 재현 가능 테스트 케이스를 설정하려고합니다. 특정 설정을 지정하면이 SQL 문은 항상 주어진 결과로 연결됩니다 (SQL은 항상 고정되거나 항상 그렇지 않습니다).
  3. 결과를 확인하는 데 사용하는 쿼리에서 버그 또는 "펑키"를 제거하십시오.
  4. 데이터 사전을 사용하여 문제가있는 테이블의 특성 및 관련 객체를 이해하십시오. 당신은 다른 결과를 일으키는 원인을 이해해야합니다. UPDATE가 보유하고있는 행과 그렇지 않은 행을 구별하는 것은 무엇입니까?
+0

좋은 가능성 목록, 트리거가 필요합니다. – tbone

+0

자세한 내용을 작성해 주셔서 감사합니다. 우리가 실행하는 SQL은 어느 테이블에서 실행되던간에 항상 같은 테이블에 대해 실행됩니다. 이 문제는 저에게 영향을주고 매우 무작위입니다. 나는 언젠가 SQL을 실행할 수 있으며 정상적으로 작동합니다. 다음 날에도 동일한 SQL이 제대로 실행되지만 변경 사항은 적용되지 않습니다. 나는이 문제를 재현하는데 실패했다. 우리 개발팀이 IDE 설정을 확인하도록했습니다. IDE 설정과 동일합니다. 평판의 영향은 나를 완전하게 표시하는 명령과 관련이 있지만 명령은 달라 붙지 않습니다. "그들은"내가 의도적으로 내 일을하지 않는다고 생각한다. – MKowalski

+0

우리 회사의 데이터베이스는 모기업의 DBA가 관리하므로, 어떻게 설정했는지 알 수는 없습니다. 저는 SQL 개발자 인 상상력에 의해서가 아닙니다. 나는 그것을 작성하는 방법을 아는 사람들이 나에게주는 코드를 실행한다. 객체는 가장 명확한 테이블입니다. 왜 이런 일이 일어나고 있는지를 파악할 때 가장 큰 문제는 언제 일어날 지 결코 알 수 없다는 것입니다. 지금 실행하는 SQL은 작동하지 않을 수 있지만, 같은 창에서 5 분 후에 동일한 SQL을 실행하면 작동합니다. 매우 실망 스럽다. – MKowalski

1

저는 PL/SQL Developer를 10 년 이상 사용해 왔지만 성공적으로 truncate 작업을 취소한다는 것을 결코 알지 못했습니다. 그것이 가능하다면 AA는 그것을 메뉴 항목으로 추가해야합니다. 잘못된 데이터베이스 연결에 대해 명령을 실행했을 가능성이 높습니다.

+0

여기에 모두가 수년간 PL/SQL을 사용 해왔다. 아무도 전에는 이런 일이 일어난 것을 본 적이 없습니다. PL/SQL을 탓하는 유일한 이유는 내가 무엇을 할 수 있는지 알지 못하기 때문입니다. 우리는 이미 SQL 프로파일을 리셋하고, PL/SQL을 리셋했으며, 본사가 우리 회사에서 Citrix를 강요하기도 전에이 프로파일을 재설정했습니다. 나는 잘못된 데이터베이스에 로그인하는 것만 큼 간단했으면 좋겠다. – MKowalski

+0

죄송합니다 - "내 회사의 모든 사람들이 PL/SQL을 오랫동안 사용해 왔습니다." – MKowalski

+1

심지어 "내 회사의 모든 사람들은 _PL/SQL Developer_를 오랫동안 사용해 왔습니다." –

1

불편을 끼쳐 드려 죄송합니다. 그러나 대기업에서는 변경 관리 프로세스가 이와 비슷하다는 사실에 놀랐습니다. 대규모 다국적 기업에서는 작동하지 않지만 프로덕션 데이터베이스에서 변경 한 사항은 먼저 관리가 승인하고 DBA (또는 귀하의 경우 팀)가 실행합니다. 실행되는 모든 스크립트는 다음을 수행합니다.

  1. 연결되는 데이터베이스 인스턴스 정보를 나열합니다. 예 :

    v $ instance에서 host_name, instance_name, version, startup_time을 선택하십시오.

  2. 스풀 파일에 출력합니다 (DBA가 일반적으로 SQLPLUS를 사용하지만, 내가 PL/SQL 개발자가 동일한 작업을 수행 할 수 있습니다 확신)

  3. 는 시작과 끝의 현재 날짜와 시간을 (표시 출력 파일이 변경 관리 서버에 저장됩니다

  4. 스크립트) (디렉토리 구조는 쉽게 주어진 인스턴스 및/또는 주어진 기간) 오류에

  5. 종료에 대한 변경 사항을 당겨 할 수 있습니다 :

    WHEREEVER SQLERROR EXIT SQL.SQLCODE

  6. 실행하는 포스트 스크립트를 필요한 모든 추가 검사 (수를 선택, 등)

  7. 는 커밋을 포함하여 실행중인 각 명령 (세트 에코)를 보여줍니다!

이 모든 것이 스크립트가 성공적으로 실행되었는지 확인할뿐만 아니라 CYOA를 허용 할 것입니다. 아마 당신은 당신의 팀과 이야기하여 자신의 환경에서이 작업을 수행 할 수 있습니다. 희망이 도움이됩니다.

0

내 문제가 해결되었는지 알 수있는 방법이 없지만 여기에 내가 한 일이 있습니다. 1. 우리 회사의 Citrix 팀과 연락하여 팀에 여러 가지 사례를 제공 할 것을 요청했습니다. PL/SQL이 열려 있습니다. 이것은 완료되었으므로 여러 DB 연결이있는 인스턴스 하나가 필요하지 않습니다. 2. DBA에 연락하여 기존 프로필을 제거한 다음 새 사용자 이름으로 새 프로필을 만드십시오.

지금까지이 새로운 조건에서 실행 한 모든 SQL은 문제가 없습니다. 그러나 나는 겪고있는 문제를 재창조 할 방법이 없습니다. 그래서 저는 제 사업에 관해 계속하고 최선을 희망합니다.

지금부터이 문제를 다시 경험하지 못했지만 몇 달 후에 다른 사용자가 경험할 수 있도록이 게시물을 업데이트해야합니다.

운영자 오류 (스크린 샷은 운영자 오류가 아니라는 것을 증명하지만 내 동료가 스크린 샷을 위조했다고 비난했을 때 나를 믿어야하는 이유)와 도덕적 지원에 대한 고발에 감사드립니다.