Gestione del database OLTP - SQL Server | Microsoft
Gestione del database OLTP - SQL Server | Microsoft

MICROSOFT SQL SERVER: Gestione del database

Gestione di un database Microsoft SQL Server

In questo articolo vediamo come si fa il backup ed il restore di un database Microsoft SQL Server.

Nel dettaglio io ho fatto le prove con un database Microsoft SQL Server 2008 (chiamato anche ms sql server 2008). L'articolo si concentra sul ripristino del database.

Il backup avrà step molto simili ma più semplici.

Vedremo anche come eseguire script particolarmente pesanti.

Risponderemo anche alla domanda: coma si fa a contare quante tabella ci sono in un db?

Script per la creazione di un DB

Vediamo uno script per poter creare un DB su SQL SERVER (testato sulla versione 2012):

 

 

USE [master]
GO

/****** Object:  Database [MyDB]    Script Date: 18/12/2017 11:45:57 ******/
CREATE DATABASE [MyDB] ON  PRIMARY 
( NAME = N'MyDB_DATA', FILENAME = N'C:\MyDB\MyDB_Data.mdf' , SIZE = 2510784KB , MAXSIZE = UNLIMITED, FILEGROWTH = 51200KB ), 
 FILEGROUP [MyDB_IDX] 
( NAME = N'MyDB_IDX', FILENAME = N'C:\MyDB\MyDB_Idx.mdf' , SIZE = 51200KB , MAXSIZE = UNLIMITED, FILEGROWTH = 51200KB ), 
 FILEGROUP [MyDB_NTXT] 
( NAME = N'MyDB_NTXT', FILENAME = N'C:\MyDB\MyDB_Ntxt.mdf' , SIZE = 208896KB , MAXSIZE = UNLIMITED, FILEGROWTH = 51200KB )
 LOG ON 
( NAME = N'MyDB_LOG', FILENAME = N'C:\MyDB\MyDB_Log.ldf' , SIZE = 1741824KB , MAXSIZE = UNLIMITED, FILEGROWTH = 51200KB )
GO

ALTER DATABASE [MyDB] SET COMPATIBILITY_LEVEL = 100
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO

ALTER DATABASE [MyDB] SET ANSI_NULL_DEFAULT OFF 
GO

ALTER DATABASE [MyDB] SET ANSI_NULLS OFF 
GO

ALTER DATABASE [MyDB] SET ANSI_PADDING OFF 
GO

ALTER DATABASE [MyDB] SET ANSI_WARNINGS OFF 
GO

ALTER DATABASE [MyDB] SET ARITHABORT OFF 
GO

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

ALTER DATABASE [MyDB] SET AUTO_SHRINK OFF 
GO

ALTER DATABASE [MyDB] SET AUTO_UPDATE_STATISTICS ON 
GO

ALTER DATABASE [MyDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO

ALTER DATABASE [MyDB] SET CURSOR_DEFAULT  GLOBAL 
GO

ALTER DATABASE [MyDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO

ALTER DATABASE [MyDB] SET NUMERIC_ROUNDABORT OFF 
GO

ALTER DATABASE [MyDB] SET QUOTED_IDENTIFIER OFF 
GO

ALTER DATABASE [MyDB] SET RECURSIVE_TRIGGERS OFF 
GO

ALTER DATABASE [MyDB] SET  DISABLE_BROKER 
GO

ALTER DATABASE [MyDB] SET AUTO_UPDATE_STATISTICS_ASYNC ON 
GO

ALTER DATABASE [MyDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO

ALTER DATABASE [MyDB] SET TRUSTWORTHY OFF 
GO

ALTER DATABASE [MyDB] SET ALLOW_SNAPSHOT_ISOLATION ON 
GO

ALTER DATABASE [MyDB] SET PARAMETERIZATION SIMPLE 
GO

ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT OFF 
GO

ALTER DATABASE [MyDB] SET HONOR_BROKER_PRIORITY OFF 
GO

ALTER DATABASE [MyDB] SET RECOVERY SIMPLE 
GO

ALTER DATABASE [MyDB] SET  MULTI_USER 
GO

ALTER DATABASE [MyDB] SET PAGE_VERIFY CHECKSUM  
GO

ALTER DATABASE [MyDB] SET DB_CHAINING OFF 
GO

ALTER DATABASE [MyDB] SET  READ_WRITE 
GO


Una volta creato il DB si può anche procedere alsuo restore.

 

Restore a DB

Il restore di un database è una procedura molto utile sia per rispristinare un database, ad esempio corrotto, ma anche per importare su un altra macchina una copia di un database.

Questo articolo si concentra su quest'ultima procedura.

Per prima cosa occorre avere il database sul server. Anche se vuoto e senza tabella.

Ovviamente, occorre avere il backup del database principale.

A questo punto si deve fare click destro sul nome del database e scegliere la voce Tasks e poi la voce Restore ed infine la voce database.

 

Si apre a questo punto una finestra. Sulla destra scegliete la voce General e poi sulla sinistra la voce From Device.

Noi vogliamo fare la import del database utilizzando un file presente su file system.

Scegliendo la voce From Device si aprirà una finestra di dialogo che vi permetterà di aggiungere un nuovo file.

Voi dovete aggiungere il file contenente la copia di backup dell'altro database.

Fatto questo cliccate su OK.

Vi comparrirà una lista con l'elenco dei database che è possibile ripristinare in base al file indicato.

Cliccate quindi sul checkbox restore del database che vi interessa.

Sulla sinistra ora scegliete il tab options.

Sulla sinistra selezionate l'opzione Overwrite the existing database.

Sotto troverete una griglia con indicato il file del database che state importando e sovrascrivendo ed il suo file di log. Questi due nomi e questi due path vengono letti dal file che avete indicato. Dovete quindi controllare il match con i vostri da sovrascrivere.

Fatto questo non vi rimane che selezionare OK ed il gioco è fatto.

 

Le prove da me fatte sono state condotte su database Microsoft SQL Server 2008, ma sul database SQL Server 2005 funzionano lo stesso. Sulle precedenti versioni il meccanismo dovrebbe essere molto simile.

 

Eseguire script pesanti

Qui il termine pesante sta ad indicare il peso in MB (MegaBytes) dello script. A volte, per effettuare un restore di un database, o per importare su un secondo database l'export di un database fatto altrove, è necessario eseguire script pesanti. L'unico modo per eseguirli è a riga di comando nel seguente modo:

 

sqlcmd -S <host> -U <user name> -P <password> -i <path to file>\mySqlScript.sql

 

Modalità Restricted User

Quando si eseguono determinate attività, come quella di restore, è molto conveniente mettere il DB in madalità "Singolo Utente".

In questa maniera siamo sicuri che non ci siano "troppi" utenti collegati che possano creare problemi nella fase di ripristino.

Si può quindi impostare il database così:

 

ALTER DATABASE database-name SET RESTRICTED_USER;

 

E alla fine ripristinare il tutto con

 

ALTER DATABASE database-name SET MULTI_USER;

 

Una guida più dettagliata la trovate qui.

 

Assign a login to a user created without login

Gli utenti di un database possono o no avere la possibilità di loggarsi direttamente al loro database.

Ma come si fa a cambiare tale caratterestica? Ovvero, se noi abbiamo un utente "sql user without login" ma vogliamo dargli la possibilità di loggarsi che query dobbiamo usare?

 

use [MyDB];
alter user myUser with login = myUser;

 

Queste sono le istruzioni da eseguire!

 

Contare le tabelle presenti nel DataBase

A volte è un numero che ci può servire e se non vogliamo andare a contare manualmente le tabelle ecco la query che fa al caso nostro:

 

USE <MyDatabase>

SELECT COUNT(*)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'