SQL Server tabel hernoemen (sp_rename)

Denk goed na over de gevolgen van het hernoemen van tabellen in een SQL Server database!

Problemen waar ik regelmatig tegen aan loop, is dat objecten (vaak primary keys) niet in de nieuwe naamconventie zijn meegenomen. Bijvoorbeeld de tabel dbo.tblIndex wordt hernoemd naar dbo.tblIndexArchive. Echter op deze tabel staat een primary key met de naam PK_tblIndex_IndexId. Vervolgens wordt de tabel dbo.tblIndex opnieuw aangemaakt en geeft het aanmaken van de primary key een foutmelding, omdat die naam al binnen de tabel dbo.tblIndexArchive is gebruikt. Onderstaand TestLab iillustreert en verduidelijkt het probleem.

/*

Datum			: 5 januari 2024
Ontwikkelaar	: Mickel Reemer

Doel van het script:
--------------------
Inzage geven in gevolgen van het hernoemen van een tabel
zonder voldoende rekening te houden met de naamconventie
van objecten (zoals indexen) binnen die tabel.
*/

-- Verwijder de testtabellen wanneer ze aanwezig zijn
DROP TABLE IF EXISTS dbo.tblIndex;
DROP TABLE IF EXISTS dbo.tblIndexArchive;

-- Maak de tabel dbo.tblIndex aan en plaats een primary key op de tabel
CREATE TABLE dbo.tblIndex (
	IndexId		INT IDENTITY (1,1),
	IndexName	NVARCHAR(100),
	Remarks		NVARCHAR(200),
	CONSTRAINT PK_tblIndex_IndexId PRIMARY KEY CLUSTERED (IndexId)
);

-- Maak een index op de tabel dbo.tblIndex aan
CREATE INDEX tblIndex_IndexName ON dbo.tblIndex (IndexName);

-- Vul de tabel dbo.tblIndex met testrecords
INSERT INTO dbo.tblIndex (
	IndexName,
	Remarks
)
VALUES	('Index 1','Remark 1'),
		('Index 2','Remark 2'),
		('Index 3','Remark 3'),
		('Index 4','Remark 4'),
		('Index 5','Remark 5'),
		('Index 6','Remark 6'),
		('Index 7','Remark 7');

-- Hernoem de tabel dbo.tblIndex naar dbo.tblIndexArchive
EXEC sp_rename 'dbo.tblIndex', 'tblIndexArchive';

-- Maak de tabel dbo.tblIndex opnieuw aan met een primary key
CREATE TABLE dbo.tblIndex (
	IndexId		INT IDENTITY (1,1),
	IndexName	NVARCHAR(100),
	Remarks		NVARCHAR(200),
	CONSTRAINT PK_tblIndex_IndexId PRIMARY KEY CLUSTERED (IndexId)
);

/*
Het opnieuw aanmaken van de tabel geeft dus een foutmelding
omdat de naam van de primary key al in de tabel dbo.tblIndexArchive
bestaat.

Mijn advies zou zijn om eerst alle objecten binnen de tabel
dbo.tblIndexArchive te wijzigen naar de juiste naamconventie
en vervolgens pas de nieuwe tabel aan te maken.
*/

Belangrijk
Vergeet de naamconventie van de statistics niet te bekijken!

Uw SQL Server nog nét iets sneller?

Het kan; misschien.

Tijdens een standaard installatie van Windows Server wordt onder andere de standaardenergiemodus door Microsoft ingesteld. Deze modus is te vinden door in het start menu voor instellingen te kiezen vervolgens voor systeem en daarna voor ‘Aan/Uit & Accu’. In dat scherm wordt de energiemodus gevonden. Standaard wordt dit tijdens de installatie van Windows die als ‘Gebalanceerd’ ingesteld. Voor maximale performance is het beter om deze instelling op ‘Beste prestaties’ te zetten.

Waarom dan de standaard ‘Gebalanceerd’? Dit is vooral ingesteld voor mobiele Windows apparaten die op een accu kunnen werken, zoals notebooks. Dat is dan meteen ook een punt van aandacht: bij een mobiel Windows apparaat zal bij gebruik van de energiemodus ‘Beste prestaties’ veel meer energie worden gebruikt en dus de accu eerder leeg zijn.

Windows in het Engels? Dan vindt u de instelling in Windows door in de zoekbalk van het Start Menu Power Options in te geven. Dat brengt u meteen in het juiste scherm. Daar zet u de instelling op High performance.

Hiermee krijgt u waarschijnlijk een nét iets snellere SQL Server; gewoon klip en klaar in het Nederlands.

SQL Server met Microsoft 365 combineren

Ongeveer een jaar geleden heb ik een Microsoft 365 Business Standard abonnement genomen. Na een maand of twee vroeg ik mij af waarom ik dat nooit eerder heb gedaan. Wat een mooie omgeving. Zo’n abonnement kent wel z’n uitdagingen. Er is zóveel te configureren dat het haast onmogelijk is om door de instellingen het bos nog te zien.

Vandaag was ik bezig met het configureren van een nieuwe SQL Server 2019 Developer instance. Eén van de belangrijke punten is het configureren van Database Mail, zodat er operators en alerts kunnen worden geconfigureerd en belangrijke zaken (alerts en SQL Agent jobs) naar mij gestuurd worden. Dat opzetten ging niet helemaal zonder slag of stoot. Twee pijnpunten waar ik tegen aan liep:

  • Wat is de SMTP server van Microsoft 365 Exchange –> dat bleek smpt.office365.com te zijn (vergeet SSL niet; poort 587!)

  • SMTP op tenant niveau moet worden aangezet; die leg ik hieronder even uit

Ik kreeg bij het sturen van database mail vanuit mijn SQL Server de melding Cannot send mails to mail server. (Voor de SMTP-server is een beveiligde verbinding vereist of de client is niet geverifieerd. Het serverantwoord is: 5.7.57 Client not authenticated to send mail. Error: 535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant. Visit aka.ms/smtp_auth_disabled for more info terug.

Standaard staat het versturen van mail via SMTP dus uit bij het aanmaken van een Exchange account binnen Microsoft 365. Dat zag ik niet helemaal aankomen, maar onlogisch is het ook niet. Wat is er voor nodig om dit aan te zetten?

  • Ga binnen Microsoft 365 Admin naar Users > Active users

  • Selecteer de gebruiker en rechts op het scherm daarna Mail

  • In het Email apps gebied, klik op Manage email apps

  • Zet het vinkje uthenticated SMTP setting aan

  • Vergeet niet met ‘Save changes’ weg te schrijven
Dit is binnen Microsoft 365 dus per gebruiker in te stellen; wel zo veilig.

Voorleesontbijt door Mickel: Stap maar op mijn bezemsteel

Vandaag zijn de nationale voorleesdagen begonnen. Ook SQLTeam.NL levert hier graag een bijdrage aan met een voorleesmoment. Het voorleesmoment zal op zaterdag 23 januari 2021 om 8:30 uur zijn en kan via Microsoft Teams worden gevolgd (zie deze link).

Het boek dat zal worden gelezen is het boek “Stap maar op mijn bezemsteel” van Julia Donaldson. Het verhaal gaat over een heks die mooie avonturen op en met haar bezemsteel meemaakt. Pak op 23 januari een boterham en een glas melk, ga er lekker voor zitten en luister mee!