Κατά την διάρκεια του χθεσινού μου μαθήματος είχα μια ερώτηση που επαναλαμβάνεται με μαθηματική ακρίβεια και αφορά τα sql protocols και πως αυτά χρησιμοποιούνται. Επειδή έχω δει ότι υπάρχει ένα σύννεφο γύρω από αυτό το θέμα γράφω αυτό το άρθρο φιλοδοξώντας να διώξω το σύννεφο αυτό.
Όταν μια εφαρμογή επικοινωνεί με το SQL Server Database Engine τα APIs που παρέχονται από τo protocol layer ελέγχουν την επικοινωνία αυτή χρησιμοποιώντας ένα format που έχει φτιάξει η Microsoft και το οποίο ονομάζετε Tabular data stream (TDS) packet.
Αυτό δεν μπορεί να «ταξιδέψει» στο δίκτυο και για αυτό το λόγο το SQL Server Network Interface (SNI) layer τόσο στον server όσο και στον client εσωκλείουν το TDS σε κάτι που μπορεί να «ταξιδέψει» και το οποίο δεν είναι κάτι άλλο από ένα network package που χρησιμοποιεί ένα από τα πρωτόκολλα επικοινωνίας όπως TCP/IP ή Named Pipes.
Στο server τα network libraries είναι μέρος του SQL Server ενώ στον client είναι μέρος του SQL Native Client.
Μέσα από τον SQL Server Configuration Manager μπορούμε να ορίσουμε τα πρωτόκολλα με τα οποία θέλουμε να δουλεύει ο SQL Server, και εδώ είναι το κύριο στοιχείο της ερώτησης που τίθεται.
O SQL Server έχει τα εξής πρωτόκολλα:
- Shared Memory. Είναι το απλούστερο, χωρίς καμία παράμετρο για να ορίσεις, απλά το ενεργοποιείς ή το απενεργοποιείς. Αυτό όμως που πρέπει να τονίσω είναι ότι το συγκεκριμένο σου παρέχει την δυνατότητα να συνδεθείς στον SQL Server μόνο εφόσον έχεις στήσει την εφαρμογή σου πάνω στην ίδια μηχανή που έχεις στήσει τον SQL Server.
Για να το καταλάβετε καλύτερα. Όταν είσαι φυσικά πάνω στον server και εκτελείς τον SSMS συνδέεσαι με αυτό το πρωτόκολλο. Αν έχεις βάλει στον pc σου SQL Server και ανοίγεις το SSMS για να συνδεθείς στο τοπικό σου SQL Server instance ή τρέχεις μια εφαρμογή που έχεις στο pc σου και η οποία βλέπει μια βάση που έχεις στο τοπικό SQL Server instance σου πάλι αυτό χρησιμοποιείς.
Τέλος να τονίσω ότι όσοι clients είναι με MDAC 2.8 και παλαιότερο δεν μπορεί να γίνει σύνδεση μέσω Shared Memory. Στην περίπτωση αυτή γίνεται προσπάθεια να γίνει η σύνδεση με Named Pipes.
- Named Pipes. Αυτό έχει σχεδιαστεί για LANs. Ένα τμήμα της μνήμης χρησιμοποιείται από ένα process για να περάσει την πληροφορία στο άλλο. Αυτό το άλλο process μπορεί να είναι είτε στον τοπικό υπολογιστή είτε σε απομακρυσμένο.
- TCP/IP. Το γνωστό σε όλους μας πρωτόκολλο. Αυτό σημαίνει ότι μπορούμε να εκμεταλλευτούμε όλες του τις δυνατότητες (routing, security κλπ.) απλά θα πρέπει σωστά να το κάνουμε configure.
/*antonch*/