sql >> Database >  >> RDS >> Sqlserver

Windows Azure SQL Database - Identiteit Auto increment-kolom slaat waarden over

Misschien heb je hier pech als je deze hiaten moet wegwerken.

Ik heb dit probleem zelf ondervonden terwijl ik een nieuwe applicatie aan het ontwikkelen/testen ben. Ik voel aan wat er hier in sql azure gebeurt op basis van wat ik heb gelezen over sql server 2012. Ik heb hier geen documentatie over kunnen vinden voor sql azure.

Van wat ik heb gelezen is dit een functie die overkomt als een bug IMO. In SQL Server 2012 heeft Microsoft de mogelijkheid toegevoegd om reeksen te maken. Reeksen registreren welke waarden zijn gebruikt in blokken van 1000. Laten we zeggen dat je reeks vorderde... 1, 2, 3, 4, 5... en dan start je sql-server opnieuw op. Welnu, de reeks heeft het feit al opgeslagen dat het blok 1-1000 al is gebruikt, dus het springt u naar de volgende 1000.... dus uw volgende waarde is 1001, 1002, 1003, 1004.... Dit verbetert de prestaties van wordt ingevoegd bij het gebruik van sequenties, maar kan resulteren in ongebruikelijke hiaten. Er is een oplossing hiervoor voor uw reeks. Voeg bij het specificeren van je volgorde de parameter "NOCACHE" toe, zodat er geen blokken van 1000 tegelijk worden opgeslagen. Zie hier voor meer documentatie.

Waar dit een probleem wordt, is dat de kolommen Identiteit lijken te zijn gewijzigd om hetzelfde paradigma te gebruiken. Dus wanneer uw server, of in dit geval uw sql azure-instantie opnieuw wordt opgestart, kunt u grote gaten (1000's) in uw identiteitskolommen krijgen omdat het grote blokken als "gebruikt" in de cache plaatst. Hier is een oplossing voor voor sql server 2012. U kunt een opstartvlag t272 specificeren om uw identiteit terug te zetten naar het oude sql server 2008 r2 paradigma. Het probleem is dat ik niet weet (het is misschien niet mogelijk) hoe ik dit in SQL Azure moet specificeren. Kan geen documentatie vinden. Bekijk deze thread voor meer details over sql server 2012.

Controleer de identiteitsdocumentatie hier in het msdn. Met name de sectie "Opeenvolgende waarden na herstart van de server of andere fouten". Dit is wat er staat:

Dus als u opeenvolgende waarden moet hebben, kunt u proberen een reeks met nocache op te geven in plaats van te vertrouwen op uw identiteitskolom. Ik heb dit zelf niet geprobeerd, maar het klinkt alsof u problemen zult hebben om dit te laten werken met het entiteitsframework.

Sorry als dit niet veel helpt, maar het is in ieder geval wat informatie over wat je ervaart.



  1. MySQL - SELECTEER, WORD LID

  2. Probleem met codering van Oracle PL/SQL HTTP-verzoekrespons

  3. mysql_close():5 is geen geldige MySQL-Link-bron in C:\wamp\www\Includes\footer.php op regel 4

  4. Maak een kopie van de interne C-functie van PostgreSQL en laad deze als een door de gebruiker gedefinieerde functie