심각한 오류가 발생했습니다. 1c. Infobase 변환 오류입니다. C, MS SQL을 사용하여 정보베이스 구성 복원

1C:Enterprise에서 작업할 때 다음 메시지가 나타날 수 있습니다. "새 버전의 1C:Enterprise를 사용하려면 정보베이스를 변환해야 합니다." 이 창이 나타나는 이유는 무엇이며 오류를 해결하려면 어떻게 해야 합니까?

대부분의 경우 창이 나타나는 이유는 최근 프로그램이 오래된 버전에서 최신 버전으로 전환되었기 때문입니다. 다양한 플랫폼에서 정보베이스 1C자체 방식으로 형성되고 다른 구성을 취합니다. 수행해야 할 작업은 데이터베이스(오래된 플랫폼에 해당하는 구조)를 최신 형식으로 변환하는 것뿐입니다.

데이터베이스 변환

이 절차는 간단하지만 변환 중에 오류가 발생할 경우(예: 컴퓨터가 꺼져서 오류가 발생하는 경우) 먼저 데이터베이스의 백업 복사본을 만드는 것이 좋습니다. 정보베이스 1C, 프로그램 자체와 마찬가지로 손상될 수 있습니다). 그런 다음 다음 동작 알고리즘을 적용합니다.

  • 구성자 모드에서 데이터베이스를 엽니다.
  • 정보베이스를 변환하라는 메시지가 표시됩니다. 확인을 클릭하세요.

  • 구성기를 닫습니다.

데이터베이스를 엽니다. 문제 없이 시작되어야 합니다. 변환 후에도 오류 창이 계속 나타나면 절차를 다시 시도할 수 있습니다. 이것이 도움이 되지 않으면 1C 프로그래머에게 문의해야 합니다. 때로는 작업을 수행하는 동안 프로그램이 멈출 수 있습니다. 지금은 어떤 조치도 취할 필요가 없습니다.

중요한! 정보베이스 1C최신 버전의 프로그램으로 변환된 파일은 이전 버전에서 열 수 없습니다.

배경

새로운 정보 레지스터 “MessageTrackingLog”를 생성해야 했습니다. 구성에 추가하고 데이터를 로드했습니다. 그런 다음 최적화 작업이 이루어졌습니다. 레지스터 구조를 변경해야 했습니다. 그러나 그것은 거기에 없었습니다!

여기에서는 모든 것이 명확합니다. 레코드가 고유하지 않게 되었기 때문에 삭제해야 합니다!

가장 쉬운 방법은 다음과 같습니다.

NewRecord = InformationRegisters.MessageTrackingLog.CreateRecordSet(); NewRecord.Write();

이 방법을 사용하면 1C에서 레지스터를 매우 빠르게 지울 수 있습니다(그러나 이것은 또한 우리의 실수입니다).

오류

레지스터가 비어 있는 것처럼 보이며 1C를 업데이트할 수 있습니다. 놀라게 하고 싶지는 않지만 또 오류가 발생합니다.


오류는 무엇을 나타냅니까?

정보베이스 업데이트 프로세스 중에 심각한 오류가 발생했습니다.
때문에:
고유 인덱스에 고유하지 않은 값을 삽입하려고 합니다.
Microsoft SQL Server Native Client 11.0: 개체 이름 "dbo._InfoRgChngR34546NG" 및 인덱스 이름 "_InfoR34546_ByNodeMsg_RNTSRRRRRRNG"에 대해 중복 키가 발견되어 CREATE UNIQUE INDEX 문이 종료되었습니다. 중복 키 값은 (0x00000011,d7, , 4015년 9월 27일 오후 10시 22분, 768404,00,00,00,00,00,00).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, 상태=1, 심각도=10, 기본=1505, 줄=1

설명

SQL의 구조를 이해해보자. 우리에겐 등록부가 있어요 "MessageTrackingLog"는 SQL에서 테이블 "에 있습니다. _InfoR34546". 특수 처리나 "poke" 방법을 사용하여 확인할 수 있습니다(테이블 이름이 이미 오류 텍스트에 표시되어 있으므로 이를 수행할 필요가 없습니다).

이제 무슨 일이 일어났는지 설명하겠습니다. 데이터를 레지스터에 로드했을 때 SQL에서는 테이블에 기록되었습니다." _InfoR34546". 1C의 코드로 테이블을 지울 때 이 데이터가 테이블에서 삭제되었습니다." _InfoR34546", 그러나 테이블에 복사되었습니다." _InfoRgChngR34546". 이것이 문제가 되었습니다.

해결책

이 문제를 해결하려면 SQL 테이블 "_InfoRgChngR34546"을 지워야 합니다.

"Microsoft SQL Server Management Studio"를 예로 들어 말씀드리겠습니다. "로 가자 Management Studio". 데이터베이스를 찾아 테이블 탭을 열고 아무 항목이나 클릭한 후 "새 쿼리" 버튼을 클릭합니다. 이제 쿼리를 입력합니다.

테이블 "_InfoRgChngR34546" 자르기

다른 테이블이 있을 수도 있어요! 잊지 마요!

그리고 실행 또는 "F5" 키를 누르세요. 결과는 다음과 같습니다.

이제 1C를 안전하게 업데이트할 수 있으며 오류가 발생하지 않습니다!

새로운 서버로 이전했습니다. SQL과 1C를 실행합니다. 예전에 비하면 많이 시원해졌습니다. 그리고 Gilev의 테스트에서도 이 사실이 확인되었습니다. 기존 서버의 10-15에 비해 39가 나왔습니다. 따라서 구매 직후 데이터베이스를 전송하고 작업을 시작했습니다.

그러나 어느 시점에서 문제가 발생했습니다. 사용자는 느린 작업에 대해 불평하기 시작했습니다. 우리는 서버와 서비스(별도 게시물의 주제)에 대한 특정 설정을 지정하고 서버를 재부팅하기로 결정했습니다. 다행스럽게도 재부팅 속도는 2분이었습니다(다른 서버에서는 최대 10분이었습니다). 그 후 1C에 로그인하면 다음 메시지가 나타납니다.

"주목!!! 마지막 구조 조정 후 데이터를 업데이트하는 동안 오류가 발생했습니다. 업데이트를 반복해야 합니까? "설마"

"예"를 클릭하면 다음이 나타납니다.

“불완전한 구성 저장 작업이 감지되었습니다. 계속하려면 작업을 완료해야 합니다."

내가 하기로 결정한 첫 번째 일은 Managment Studio의 CHECKDB였습니다. 2시간의 대기(500GB 데이터베이스) 후에 모든 것이 정상이었습니다.

동적 업데이트 중에도 동일한 오류가 발생한다는 정보를 인터넷에서 찾았습니다.

온라인에서 제안된 솔루션은 즉시 도움이 되지 않았지만 다른 조치와 함께 결과를 얻었습니다. 그래서 내가 한 일은:

해결책:

  1. 네트워크 솔루션에서 누락된 사항:

sp_configure '업데이트 허용', 1
재정의로 재구성
가다

2. 데이터베이스를 복구 모드로 전환

데이터베이스 세트 EMERGENCY, SINGLE_USER 변경

3. 데이터베이스 테스트를 수행합니다.

dbcc checkdb('db_name', REPAIR_ALLOW_DATA_LOSS)

4. 복구 모드에서 데이터베이스를 종료합니다.

데이터베이스 세트 ONLINE 변경, MULTI_USER

5. 원칙적으로 베이스 자체에 모든 것이 정상이라고 확신한다면 2-4번 항목을 수행할 필요가 없습니다. 다음으로 SQL 프로파일러에서 두 가지 쿼리를 실행합니다.

FileName = 'commit'인 구성에서 삭제
FileName = 'dbStruFinal'인 구성에서 삭제

이러한 기록은 동적 업데이트를 담당하므로 삭제를 두려워할 필요가 없습니다.

데이터베이스 쿼리의 작업 버전에서:

WHERE FileName = 'commit' 구성에서 *를 선택하세요.

WHERE FileName = 'dbStruFinal' 구성에서 *를 선택하세요.

비어있을 것입니다.

6. 설정을 반환합니다.

sp_configure '업데이트 허용', 0
가다

7. 그 후 구성 프로그램을 시작하고 데이터베이스가 작동하기 시작했습니다.

또한 첫 번째 플래그를 제거한 후 베이스 작업을 시작할 수 있습니다.

모래 상자

권한 2013년 9월 18일 오후 03:24

1C, MS SQL을 사용한 정보베이스 구성 복원

한때 문제가 발생했습니다. 저장소에서 구성을 업데이트할 때 오류가 발생하고 1C가 닫혔습니다.

나중에 밝혀진 바에 따르면 구성 저장소가 파괴되었으며 구성을 업데이트할 때 데이터베이스 구성도 저장소에서 삭제되었습니다. 정보 보안의 동적 업데이트 중에 이전에도 유사한 오류가 발생했습니다.

왜냐하면 이 문제는 한 번 이상 발생했으며 치료 옵션을 공유하기로 결정했습니다.

다음에 구성 프로그램을 시작하면 "주의!!!"라는 오류가 나타납니다. 마지막 구조 조정 후 데이터를 업데이트하는 동안 오류가 발생했습니다. 업데이트를 반복해야 합니까? 대답이 '예'이면 다음 메시지가 표시됩니다. “불완전한 구성 저장 작업이 감지되었습니다. 작업을 계속하려면 작업을 완료해야 합니다.' 이후 애플리케이션이 종료됩니다.

이 문제를 분석할 때 문제에 대한 여러 가지 솔루션이 발견되었으며 각 솔루션은 서로 다른 경우에 작동합니다.

옵션 1(동일한 구성의 복사본이 포함된 SQL 백업이 있는 경우):

정보 보안 사본이 배포되고 다음 요청이 실행됩니다.
GO DELETE FROM .. GO INSERT INTO .. ​​​​SELECT * FROM .. GO 사용
이 경우 정보 보안 구성이 저장된 테이블이 다시 채워집니다. 이 작업 후에는 정보 보안을 테스트하고 수정하는 것이 좋습니다.

옵션 2(백업이 없는 경우):

이 옵션은 마지막 선택으로 바뀌었습니다. 왜냐하면 구성은 개발 중이었고 스토리지에 의존하여 백업을 조금 잊어버렸습니다.
데이터베이스에서 "FileName" 열의 값(dbStruFinal 및 commit)에 따라 "Config" 테이블에서 두 개의 레코드가 삭제됩니다.

다음 쿼리가 실행됩니다.
GO DELETE FROM 을 사용하세요. WHERE FileName = "dbStruFinal" GO DELETE FROM . WHERE FileName = "커밋" GO
이상하게도 베이스가 살아납니다.

태그: 1C Enterprise 8.2, SQL, 구성 복원

이 기사는 작성자가 아직 작성되지 않았기 때문에 논평 대상이 아닙니다. 본격적인커뮤니티 회원. 작성자가 수신한 후에만 작성자에게 연락할 수 있습니다.