Ho bisogno di sapere come interrogare un Microsoft SQL Server, per vedere se un dato database è stato impostato su Read-Only
o no.Come rilevare lo stato di sola lettura di un database SQL Server tramite T-SQL?
È possibile utilizzare T-SQL?
Ho bisogno di sapere come interrogare un Microsoft SQL Server, per vedere se un dato database è stato impostato su Read-Only
o no.Come rilevare lo stato di sola lettura di un database SQL Server tramite T-SQL?
È possibile utilizzare T-SQL?
Le informazioni vengono memorizzate in sys.databases
.
SELECT name, is_read_only
FROM sys.databases
WHERE name = 'MyDBNAme'
GO
--returns 1 in is_read_only when database is set to read-only mode.
Questo è un command per visualizzare o impostare questa proprietà.
EXEC sp_dboption "AdventureWorks", "read only"
uscita Esempio
OptionName CurrentSetting
read only OFF
stavo cercando di usare la risposta del p.campbell per verificare se il mio Azure SQL DB è il principale uno o l'sola lettura replica - non ha funzionato . Sia il DB principale che la replica restituiti erano 0 nel campo is_read_only.
Ecco cosa ha funzionato per me:
SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
quanto sopra SELECT restituisce istruzione stringa 'READ_ONLY' o 'READ_WRITE'.
Interrogazione sys.databases
per il controllo di proprietà di sola lettura di un DB sarà solo dare le informazioni giuste se il database è stato esplicitamente set di modalità di sola lettura.
Per i database che si trovano nei server passivi (ad esempio nei server secondari di tecnologia AlwaysOn), anche se non è possibile scrivere i database, la loro modalità di sola lettura in sys.databases
sarà comunque impostata come False(0)
.
Quindi, si consiglia di controllare la modalità di sola lettura del database utilizzando l'istruzione:
SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
Questo ha funzionato anche per me per controllare Primario vs Secondario su un Database Azure. Di nota, i valori restituiti sono READ_ONLY e READ_WRITE. Inoltre, in Azure, se si esegue una query da un database che non corrisponde al nome del database passato nel primo parametro, il risultato sarà NULL. –
Quindi questo funziona bene su Azure: SELECT DATABASEPROPERTYEX (DB_NAME(), 'Updateability'); –
Perfetto! GRAZIE!!! – Giuseppe