Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

लोड के तहत रोलअप टेबल रीफ्रेश करने का सबसे अच्छा तरीका क्या है?

जिस तरह से मैंने इसे कुछ परियोजनाओं में किया है वह अलग-अलग स्कीमा में तालिका की दो प्रतियों का उपयोग करना है। तो कुछ इस तरह:

CREATE SCHEMA fake WITH AUTHORIZATION dbo;
CREATE SCHEMA standby WITH AUTHORIZATION dbo;
GO

CREATE TABLE dbo.mySummary(<...columns...>);

CREATE TABLE fake.mySummary(<...columns...>);
GO

अब एक संग्रहीत कार्यविधि बनाएं जो नकली तालिका को काटती है और फिर से भरती है, फिर लेन-देन में वस्तुओं को स्कीमा के बीच ले जाती है।

CREATE PROCEDURE dbo.SwapInSummary
AS
BEGIN
    SET NOCOUNT ON;

    TRUNCATE TABLE fake.mySummary;

    INSERT fake.mySummary(<...columns...>)
        SELECT <expensive query>;

    BEGIN TRANSACTION;
        ALTER SCHEMA standby TRANSFER dbo.mySummary;
        ALTER SCHEMA dbo     TRANSFER fake.mySummary;
        ALTER SCHEMA fake    TRANSFER standby.mySummary;
    COMMIT TRANSACTION;
END
GO

यह संभवत:कम से कम समय के बारे में है जिससे आप उपयोगकर्ताओं को नए डेटा के ताज़ा होने की प्रतीक्षा कर सकते हैं और उन्हें पढ़ने के बीच में बाधित किए बिना। (नोलॉक से जुड़े कई मुद्दे हैं जो इसे कम वांछनीय विकल्प बनाते हैं, हालांकि स्वीकार्य रूप से, कोड करना आसान है।) संक्षिप्तता/स्पष्टता के लिए मैंने त्रुटि प्रबंधन इत्यादि छोड़ दिया है, और मुझे यह भी इंगित करना चाहिए कि यदि आप उपयोग करते हैं अपने डेटाबेस को सिंक्रोनाइज़ करने के लिए स्क्रिप्ट, सुनिश्चित करें कि आप दोनों टेबलों पर बाधाओं, इंडेक्स आदि का नाम समान रखते हैं, अन्यथा आप आधे समय में सिंक से बाहर हो जाएंगे। प्रक्रिया के अंत में आप नई नकली। MySummary तालिका को TRUNCATE कर सकते हैं, लेकिन यदि आपके पास जगह है, तो मैं डेटा को वहीं छोड़ना चाहता हूं ताकि मैं हमेशा पिछले संस्करण से तुलना कर सकूं।

SQL सर्वर 2005 से पहले मैंने ठीक उसी काम को पूरा करने के लिए लेन-देन के अंदर sp_rename का उपयोग किया था, हालांकि जब से मैं इसे नौकरी में करता हूं, मुझे स्कीमा में स्विच करने में खुशी हुई, क्योंकि जब मैंने किया, तो sp_rename से गैर-दबाने योग्य चेतावनी भरना बंद कर दिया मेरे SQL सर्वर एजेंट इतिहास लॉग को ऊपर करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉलम में डिफ़ॉल्ट मान सेट करें यदि SQL 2008 में शर्त पूरी होती है

  2. एकल तालिका स्तंभ में एकाधिक बिट मान संग्रहीत करें

  3. जांचें कि स्ट्रिंग में SQL में उच्चारण वर्ण हैं या नहीं?

  4. SqlDataSourceEnumerator.Instance.GetDataSources() स्थानीय SQL सर्वर 2008 आवृत्ति का पता नहीं लगाता है

  5. SQL सर्वर कर्सर के लिए चरणों को परिभाषित करें - SQL सर्वर / TSQL ट्यूटोरियल