Avatar billede bleze Nybegynder
13. januar 2005 - 10:19 Der er 10 kommentarer og
1 løsning

Connect til anden MSSQL fra T-SQL/Stored Proc.

Jeg ønsker at oprette en forbindelse i en lokal stored procedure til en anden MSSQL server på en anden computer.  Dette er let nok via sp_addlinkedserver, men problemet kommer når jeg ønsker at starte en transaktion på den anden MSSQL samt bruge locking hints (nolock, rowlock etc).

"Cannot specify an index or locking hint for a remote data source."

Syntax for BEGIN TRAN dur slet ikke med remote servers.

Så jeg er ude efter en anden mulighed end sp_addlinkedserver og jeg kan ikke rigtig finde een. Sidste udvej er at kopiere database over lokalt på min MSSQL server, men det er tungt hvis jeg kan slippe.
Avatar billede dsj Nybegynder
13. januar 2005 - 10:48 #1
Hvis du anvender transaktioner i forbindelse med remote servere, skal du kigge på en lidt anden syntaks:

BEGIN DISTRIBUTED TRAN
...
COMMIT TRAN
Avatar billede dsj Nybegynder
13. januar 2005 - 10:49 #2
Avatar billede bleze Nybegynder
13. januar 2005 - 11:02 #3
Jeg måtte starte Distributed Transaction Coordinator servicen. Den har vi ikke før haft brug for.

Men når jeg kører mit T-SQL får jeg denne fejl:


Server: Msg 7391, Level 16, State 1, Line 8
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].


Og hvad med locking hints?
Avatar billede bleze Nybegynder
13. januar 2005 - 11:50 #4
http://support.microsoft.com/default.aspx?scid=kb;en-us;827805http://support.microsoft.com/default.aspx?scid=kb;en-us;827805

Den ene server kører Windows 2000 og den anden 2003. Iflg. MS skal begge køre 2003. Jeg har dog prøvet at gøre som de siger på begge men det hjalp ikke.  Så jeg er bange for at jeg er nødt til at kræve at database bliver kopieret til samme server. Ærgeligt
Avatar billede dsj Nybegynder
13. januar 2005 - 12:11 #5
Ohh, ja bagudkompatabilitet er ikke Microsofts stærkeste side, så det lyder meget rigtigt at 2003 ikke umiddelbart kan arbejde sammen med 2000 når det kommer til noget så avanceret som distribuerede transaktioner.
Avatar billede bleze Nybegynder
13. januar 2005 - 12:38 #6
Det lamme er at de jo begge har nøjagtig samme version af MSSQL på
Avatar billede trer Nybegynder
13. januar 2005 - 12:43 #7
Linked server er en sikkerhedsrisiko og har begrænsninger. Prøv at bruge openrowset() og opendatasource() fremfor linked server.
Avatar billede dsj Nybegynder
13. januar 2005 - 12:51 #8
Ja så *burde* det jo egentlig virke...
Avatar billede bleze Nybegynder
13. januar 2005 - 13:59 #9
trer, hjælper mig ikke. rowset skal kodes med sql som strings - dur ikke.
datasource kan ikke have locking hints.
begge kræver distributed transaction som ikke virker

:(
Avatar billede trer Nybegynder
13. januar 2005 - 22:17 #10
Lav et view på den remote server og læs data derfra, eller læs dine data fra en sp. Dermed kan du angive locking hints. 

Men faktisk - angivelse af nolock har jeg svært ved at sammenholde med behov for en distribuerede transaktion...
Avatar billede bleze Nybegynder
13. januar 2005 - 23:35 #11
jeg har behov for at bruge NOLOCK i transaktionen, samt ROWLOCK...

grundet 2003/2000 problemet har jeg besluttet at det er et krav at begge databaser findes på samme server. så er jeg ude over disse problemer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester