매 시간마다 삽입/업데이트해야하는 비정규 화 테이블을 만들었습니다. 이 프로세스는 데이터 관점에서 오히려 관련되어 있으므로 사용자를 방해하지 않고 테이블을 업데이트하는 권장 방법을 찾고 있습니다.한 테이블에서 다른 테이블로 테이블 행을 가장 효율적으로 이동하는 방법
내 프로세스가 삽입/업데이트 한 번 완료되면 별도의 테이블을 가지고 생각 중이므로 변경 사항을 실제 프로덕션 테이블로 푸시해야합니다.
도움이 될 것입니다.
매 시간마다 삽입/업데이트해야하는 비정규 화 테이블을 만들었습니다. 이 프로세스는 데이터 관점에서 오히려 관련되어 있으므로 사용자를 방해하지 않고 테이블을 업데이트하는 권장 방법을 찾고 있습니다.한 테이블에서 다른 테이블로 테이블 행을 가장 효율적으로 이동하는 방법
내 프로세스가 삽입/업데이트 한 번 완료되면 별도의 테이블을 가지고 생각 중이므로 변경 사항을 실제 프로덕션 테이블로 푸시해야합니다.
도움이 될 것입니다.
또 다른 해결책은 여러 스키마를 사용하여 스위치-A-루를 재생하는 것입니다. 필자는 작업에서이 트릭을 사용했기 때문에이 방법을 선호하기 때문에 개체 이름 바꾸기에 대한 경고 메시지는 내 기록 로그를 채우는 것입니다. 기본적으로 두 개의 추가 스키마가 필요합니다 (테이블 사본을 임시로 보관하는 사본과 캐시 사본을 보유하는 사본).
CREATE SCHEMA cache AUTHORIZATION dbo;
CREATE SCHEMA hold AUTHORIZATION dbo;
지금은 캐시 스키마에있는 테이블의 모방을 만듭니다
SELECT * INTO cache.table FROM dbo.table WHERE 1 = 0;
-- then create any indexes etc.
을 지금은 데이터 새로 고침 시간을 때 : 이론적으로
-- step 1:
TRUNCATE TABLE cache.table;
-- (if you need to maintain FKs you may need to delete)
INSERT INTO cache.table SELECT ...
-- step 2:
-- this transaction will be almost instantaneous,
-- since it is a metadata operation only:
BEGIN TRANSACTION;
ALTER SCHEMA hold TRANSFER dbo.table;
ALTER SCHEMA dbo TRANSFER cache.table;
ALTER SCHEMA cache TRANSFER hold.table;
COMMIT TRANSACTION;
를 이동할 수있는 은이 두 번째 전송 후에 dbo.table의 새 복사본을 쿼리 할 수 있기 때문에 트랜잭션이 마지막으로 전송되지만, 내가 말했듯이 이것은 almos입니다. 동시성에 차이가 있다면 즉시 놀라워 질 것입니다.
여기서도 cache.table
을 다시 잘라낼 수도 있지만 항상 데이터가 채워져 데이터 변경 사항을 비교하거나 문제가있는 경우 문제를 해결할 수 있습니다. 1 단계에서 소요되는 시간에 따라 처음부터 다시 채우기보다 역방향으로 전송을 수행하는 것이 더 빠릅니다.
이름 바꾸기와 마찬가지로 실제 테이블로 이동하면 통계가 손실되는 등이 프로세스에서 이상한 것을 얻을 수 있습니다. 이름을 고수하지 않습니다. 이름 바꾸기와 마찬가지로 테스트 해보고 싶을 것입니다. 보고 테이블에 액세스하기위한 RCSI.
한 가지 해결책은 언급 한 임시 테이블을 사용하여 수행 한 다음 프로덕션 테이블 이름으로 이름을 변경하는 것입니다 (하지만 먼저 프로덕션 테이블을 다른 것으로 이름을 바꿉니다). 그 후, 이전 생산 테이블을 삭제할 수 있습니다. 물론, 트랜잭션 내에서 모든 작업을 수행해야합니다.
그래서, 그것은 다음과 같습니다
-- Fill tmpTable
--
-- Do renaming
begin tran t1;
execute sp_rename 'productionTable', 'productionTableBackup';
execute sp_rename 'tmpTable', 'productionTable';
commit tran t1;
SQL Server의 버전/버전은 무엇입니까? –
SQL Server 2008 – Marco
2008 또는 2008 R2? 어느 판? 표준, 데이터 센터, 웹, 개발자 등을 의미하는 –