sql >> Database >  >> RDS >> Sqlserver

Gegevenstoegang in-/uitschakelen in SQL Server (T-SQL-voorbeeld)

SQL Server heeft een configuratieoptie voor "gegevenstoegang" die een gekoppelde server voor gedistribueerde querytoegang in- en uitschakelt.

Als u ooit de foutmelding "Server is niet geconfigureerd voor DATATOEGANG" krijgt, moet u waarschijnlijk gegevenstoegang inschakelen voor de gekoppelde server waarop u de gedistribueerde query probeert uit te voeren. Omgekeerd kunnen er ook momenten zijn waarop u gegevenstoegang moet uitschakelen.

Gebruik de sp_serveroption . om gegevenstoegang in of uit te schakelen systeem opgeslagen procedure. Voer het uit op de server waarvan u gedistribueerde query's wilt uitvoeren. Het volgende voorbeeld laat zien hoe u dit doet.

Voorbeeld 1 – Gegevenstoegang inschakelen

Ga als volgt te werk om gegevenstoegang in te schakelen.

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

In dit geval heet de server sqlserver007 , en ik stel de DATA ACCESS optie om TRUE .

Hier is een beknoptere manier om hetzelfde te doen:

sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';

Als u een van beide uitvoert, wordt toegang tot gegevens op de opgegeven gekoppelde server mogelijk.

Overigens kan de opgegeven gekoppelde server indien nodig de lokale server zijn. Het hoeft geen externe server te zijn.

Om de instelling voor gegevenstoegang te controleren, voert u een query uit op de sys.servers systeemcatalogusweergave.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Resultaat:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 1                        |
| Homer        | 1                        |
+--------------+--------------------------+

Nogmaals, je voert dit uit tegen de lokale server - niet de externe server.

Voorbeeld 2 – Gegevenstoegang uitschakelen

Om gegevenstoegang uit te schakelen, stelt u eenvoudig @optvalue in naar FALSE .

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'FALSE';

Controleer nu de instelling opnieuw.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Resultaat:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 0                        |
| Homer        | 1                        |
+--------------+--------------------------+

Op welke server moet ik de code uitvoeren?

Voer de code uit op de server waarvan u gedistribueerde zoekopdrachten wilt uitvoeren.

In mijn voorbeeld, sqlserver007 is de naam van de lokale server en Homer is een externe/gekoppelde server. Als ik gedistribueerde zoekopdrachten wilde uitvoeren tegen Homer , zou ik de code uitvoeren tegen sqlserver007 .

Ik hoef niet naar Homer te springen om de instelling ervan te wijzigen. Het zou zelfs een andere instelling kunnen hebben dan die ik toepas op sqlserver007 .

Om dit punt te demonstreren, krijg ik het volgende als ik de resultaten van de gekoppelde server vergelijk met de daadwerkelijke instelling op de externe server.

EXEC sp_serveroption
  @server = 'Homer',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

SELECT 
  'From local',
  is_data_access_enabled 
FROM sys.servers
WHERE name = 'Homer'
UNION ALL
SELECT 
  'Remote setting',
  is_data_access_enabled 
FROM Homer.master.sys.servers
WHERE server_id = 0;

Resultaat:

+--------------------+--------------------------+
| (No column name)   | is_data_access_enabled   |
|--------------------+--------------------------|
| From local         | 1                        |
| Remote setting     | 0                        |
+--------------------+--------------------------+

In dit geval heeft de lokale server een andere instelling dan de tegenhanger van de gekoppelde server.

En het feit dat ik deze informatie via een gedistribueerde query kon ophalen, toont aan dat het de instelling van mijn eigen server was die de gedistribueerde query mogelijk maakte, niet die van de externe server.


  1. Hoe u kunt profiteren van de nieuwe partitioneringsfuncties in PostgreSQL 11

  2. Verbinding maken met een database met behulp van PHP

  3. Maak een back-up van uw MySQL-databases

  4. Pivot-operator in SQL begrijpen