Jump to content

antonch

Administrators
  • Posts

    1030
  • Joined

  • Last visited

  • Days Won

    7

Blog Entries posted by antonch

  1. antonch
    Επειδή ο φίλος Αθανάσιος το ζήτησε για να μην του χαλάσουμε το χατήρι.

    Αποθηκεύουμε το παρακάτω script σε ένα άρχειο στο δίσκο μας πχ. backup.sql





    declare @weekday char(3)
    declare @command varchar(2048)
    select @weekday=upper(left(datename(dw,getdate()),3))
    set @command = 'backup database $(dbname) to disk =''$(backupPath)\$(backupFileName)_'+@weekday+'.bak' + ''' with init'
    exec (@command)
    και μετά με το sqlcmd εργαλείο του SQL Server από command line γράφουμε το εξής

    C:>sqlcmd –E –i backup.sql –v dbname=”” backupPath=”” backupFileName=””
  2. antonch
    Χρόνια Πολλά σε όλους!
    Εύχομαι ο νέος χρόνος να φέρει υγεία, αγάπη και ευτυχία σε εσάς και τις οικογένειες σας.
    Αυτές τι μέρες βρήκα την ευκαιρία να διαβάσω αρκετά νέα βιβλία τα οποία είχα προμηθευτεί επί τούτου. Μέσα σε όλα αυτά ξεχώρισα τo παρακάτω εισαγωγικό σημειώμα που apriory με εκφράζει απόλυτα.
    Με το που το διάβασα πετάχθηκα από το καναπέ μου και αναφώνησα ΠΕΣΤΑ ΧΡΥΣΟΣΤΟΜΕ. Χαίρομαι ιδιαίτερα όταν αυτά που και εγώ πιστεύω και διδάσκω είναι σύμφωνα με τα λεγόμενα ανθρώπων που είναι έγκυροι και καταξιωμένοι στην επιστημονική κοινότητα.
    Ο εν λόγω κύριος είναι ο Paul Nielsen, SQL Server MVP με πάνω από 30 χρόνια φούρναρης εεε Database Specialist και συγγραφέας του SQL Server Bible http://www.sqlserverbible.com/. Ειδικά το υπογραμμισμένο κείμενο είναι κορυφαίο παράδειγμα για αυτούς που επιμένουν να θεωρούν την βάση σαν ένα κουβά.
    Απολαύστε το

    Any database can be evaluated on six basic criteria: usability, data integrity, scalability, extensibility, availability, and security. Of these database objectives, the first four are primarily driven by the design and development of the database.
    One of the best practices that serves as a root cause for each of the four design driven goals is the elegance of the database design itself.
    The trouble is that elegance of design can be an elusive creature—difficult to define, difficult to achieve, and difficult to teach. But we do know that at the core of every well-designed database are the principles of normalization. In the application development world, technologies are annual trends, but not so in the database world. Even after nearly 40 years, normalization—one grouping of things is one entity, one thing is one tuple, one fact is one attribute, and every attribute must describe the tuple—is still the foundation of database technology.
    In the quest for elegance of design, the concepts of generalization and data driven design augment, but don’t negate, normalization. The war cry of the data architect is still, “The key, the whole key, and nothing but the key!” I am concerned, however, that database development skills—database design, normalization, and T-SQL—seem to be a dying art. In many shops, the lone data architect is outnumbered 50 to 1 by developers who don’t respect the
    importance of data integrity. Managers listen to the crowd, and systems are designed for today rather than for next year, much less the next decade. The design methods and development tools used to encapsulate data should be at least as stable and live as long as the data. And data lasts a long, long time. Ask around, and
    see how many DBAs manage data that’s 10, 20, or 50 years old. Most do.
    The average lifecycle of a popular application development language is 3 to 5 years; a stored procedure written 20 years ago still runs (with maybe a slight tweak to the JOIN syntax). I picture the database as a granite rock that will last for an eon. Occasionally a UI developer comes along and paints a pretty chalk picture on the rock; it washes off and a few more UI developers add their pictures. They all wash off with time, but the rock remains. OK, it’s a stretch, and I do like a great UI, but the point is that any IT architecture should be founded on data integrity.

  3. antonch
    Όπως είναι γνωρίζουμε στον SQL Server υπάρχει μια διαδικασία η οποία σκοπό έχει να μεταφέρει από την Buffer Cache τις αλλαγμένες σελίδες στο δίσκο, γίνεται σε όλες τις βάσεις εκτός από την tempdb (αν και αυτό δεν είναι και τόσο αλήθεια αλλά δεν θα το αναλύσουμε εδώ). Σκοπός του είναι να είναι όσο το δυνατό πιο ενημερωμένα τα data files με τις αλλαγές είναι γραμμένες στο log.
    Αυτό μπορεί να γίνει είτε εκτελώντας την εντολή CHECKPOINT είτε το κάνει o SQL Server αυτόματα. Το αυτόματο μπορεί να ορίστει αν το επιθυμούμε και αυτό γίνεται ορίζοντας το Recovery Interval στο SQL Server. H default τιμή είναι μηδέν που σημαίνει ότι ο SQL Server αποφασίζει για το πότε θα την κάνει αυτή την διαδικασία.
    Πρόσφατα άκουσα ότι αυτή αν δεν ορίσεις τιμή γίνεται κάθε 2 sec. Αυτό με έβαλε σε σκέψεις και αποφάσισα να το ψάξω ενδελεχώς.
    Σύμφωνα με τα BOL http://msdn.microsoft.com/en-us/library/ms189573.aspx στην παράγραφο για τα Automatic Checkpoints αναφέρει

    The SQL Server Database Engine generates automatic checkpoints. The interval between automatic checkpoints is based on the amount of log space used and the time elapsed since the last checkpoint. The time interval between automatic checkpoints can be highly variable and long, if few modifications are made in the database. Automatic checkpoints can also occur frequently if lots of data is modified.

    Αυτό όμως δεν μου έφτασε και άρχισα να κοιτάζω περισσότερα. Έφτασα σε ένα σημείο να ρωτήσω και ανθρώπους που τον έχουν φτιάξει (δεν αναφέρω τα ονόματα τους για μην θεωρηθεί ότι πουλάω μούρη ότι μιλάω μαζί τους). Τελικά οι ερωτήσεις μου και οι αναζητήσεις μου είχαν αποτέλεσμα και ανακάλυψα ότι μπορείς να χρησιμοποιήσεις τα trace flags 3502 και 3605 τα οποία γράφουν μέσα στο error log το κάθε πότε γίνεται checkpoint.
    Επίσης είναι αρκετά εύκολο να το δεις κάνοντας monitor τον Buffer Manager\Checkpoint Pages per Sec perfmon counter.
    Με ποιά όμως λογική γίνεται trigger η αυτόματη διαδικασία? Η απάντηση δια στόματος του Paul Randal είναι η παρακάτω

    A checkpoint is triggered automatically under a variety of conditions. The most common condition is that enough transaction log has been generated that SQL Server estimates that if the server was to crash, it would take about one minute for crash recovery to complete. This is calculated based on the number of log records that have been generated since the last checkpoint and is known as the recovery interval. The next most common condition that triggers a checkpoint is when the log becomes 70% full.

    @antonch
  4. antonch
    ALTER PROCEDURE, CONTINUE, IGNORE,money and smallmoney, AFTER, BEFORE,
    INDEXKEY_PROPERTY, CAST and CONVERT,
    GROUP BY, IDENTITY (Function), DEFERRED,
    BACKUP, nchar and nvarchar, COMPUTE,
    EXECUTE, UPDATE STATISTICS, INCLUDE,
    datetime and smalldatetime, ISNULL, ROUTINE,
    ROLLBACK TRANSACTION, IS_MEMBER, BETWEEN
     

    By Michael J. Swart  

    Source : http://michaeljswart.com/?tag=sql-poem
  5. antonch
    Τις τελευταίες ημέρες για ένα περίεργο λόγο συνάντησα αρκετές φορές την ανάγκη να πρέπει να εκτιμηθεί η δυνατότητα να γίνει compress μια database. Για το λόγο αυτό αποφάσισα να φτιάξω μια stored procedure που να κάνει όλα όσα ήθελα να γίνονται με την εκτέλεση της. Μετά από μερικές μέρες δουλειάς και αρκετές αλλαγές πάνω σε αυτή το τελικό αποτέλεσμα μπορείτε να το βρείτε εδώ.
    Όμως πριν αρχίσετε να την χρησιμοποιείται νομίζω ότι είναι σκόπιμο να διαβάσετε το documentation αυτής και τις δυνατότητες που παρέχει.
    Πριν όμως το κάνω αυτό θα πρέπει να επισημάνω ότι το database compression είναι ένα feature το οποίο εμφανίστηκε στον SQL Server 2008 Enterprise Edition άρα η stored procedure αυτή μπορεί να δουλέψει από αυτή την έκδοση και πάνω, δηλαδή 2008, 2008R2 και 2012.
    Επίσης ο χρήστης που θα την εκτελέσει θα πρέπει να έχει δικαιώματα sysadmin.
    περισσότερα
  6. antonch
    Σαν DBA και DB Developer έχω πολλούς servers/instances του SQL Server τα οποία διαχειρίζομαι. Φαντάζομαι ότι και εσείς θα έχετε αρκετά είναι production είτε development instances.
    Αρκετές φορές πάνω στην βιασύνη ίσως έχετε τρέξει κάποιο script στο production ενώ δεν θα έπρεπε. Συνήθως αυτό γίνεται διότι έχετε ανοίξει ένα query window το οποίο είναι συνδεδεμένο στο instance που δεν θα έπρεπε να είναι.
    Αυτό είναι ένα θέμα. Θέλω να ξέρω κάθε φορά σε ποιο instance είμαι συνδεδεμένος. Εύκολα αυτό είναι εντοπισμό αρκεί να κοιτάξει κανείς στην status bar του query window.
    Όμως εδώ και χρόνια έχω την δυνατότητα εκτός από αυτό να έχω και χρωματική διάκριση ανά instances πώς; Μα με ένα απλό τρόπο.
    Ανοίγω το Register Servers window και κάνω register τους servers/instances που επιθυμώ αλλά πριν πατήσω OK στο window πάω στο tab Connection Properties και διαλέγω το χρώμα που επιθυμώ για το συγκεκριμένο server/instance όπως στην παρακάτω εικόνα και τότε πατώ ΟΚ

    Αυτό θα έχει σαν συνέπεια όταν ανοίγω ένα query window που είναι συνδεδεμένο στο συγκεκριμένο server/instance η status bar θα έχει το χρώμα που έχω επιλέξει και έτσι εύκολα θα μπορώ να καταλάβω που έχω συνδεθεί.

    Έτσι πλέον δεν θα εκτελώ λάθος script σε λάθος server/instance
    /*antonch*/
    /*life runs on SQL Server 2012*/
  7. antonch
    Λοιπόν μιας και απέκτησα και εδω ένα blog είπα να κάνω σεφτέ με κάτι που λίγο ή πολύ όσοι ασχολούμαστε με SQL Server αντιμετωπίζουμε.
    Πως θα βρω τα queries που κάνουν υψηλή χρήση της CPU;
    H απάντηση στο ερώτημα αυτό είναι η παρακάτω custom stored procedure η οποία δουλεύει σε SQL Server 2005 & 2008
     
    create procedure spFindQueriesThatUseHighCPU
    as
    Set NOCOUNT ON
    SELECT TOP 100
    (a.total_worker_time/a.execution_count) as [Avg_CPU_Time], -- the time is in ms
    Convert(Varchar,Last_Execution_Time) as 'Last_execution_Time',
    Total_Physical_Reads,
    SUBSTRING(b.text,a.statement_start_offset/2,
    (case
    when a.statement_end_offset = -1 then len(convert(nvarchar(max), b.text)) * 2
    else
    a.statement_end_offset end - a.statement_start_offset)/2) as Query_Text,
    dbname=Upper(db_name(b.dbid)),
    b.objectid as 'Object_ID'
    FROM sys.dm_exec_query_stats a
    cross apply sys.dm_exec_sql_text(a.sql_handle) as b
    ORDER BY [Avg_CPU_Time] DESC
    go
  8. antonch
    Πριν μερικές μέρες μια ομάδα που είναι μέλη του Solid Quality Mentors οι 


    Ron Talmage,
    Aaron Johal,
    Allan Hirt,
    Herbert Albert,
    Antonio Soto,
    Greg Low,
    Dejan Sarka,
    Larry Barnes,
    Pablo Ahumada
    αρκετοί από αυτούς MVPs στον SQL Server έφτιαξαν ένα πόνημα 490 σελίδων!!! για το τι και πως θα κάνεις upgrade τον SQL Server σου σε SQL Server 2008 R2.

    Η θεματολογία του πονήματος αυτού είναι η παρακάτω


    Upgrade Planning and Deployment
    Management and Development Tools
    Relational Databases
    High Availability
    Database Security
    Full-Text Search
    Service Broker
    Transact-SQL Queries
    Notification Services
    SQL Server Express
    Analysis Services
    Data Mining
    Integration Services
    Reporting Services
    Other Microsoft Applications and Platforms
    Appendix 1: Version and Edition Upgrade Paths
    Appendix 2: Upgrade Planning Deployment and Tasks Checklist
    Αφιέρωσα αρκετό χρόνο για να το διαβάσω και πλέον το έχω κατατάξει στην συλλογή των πονημάτων που θεωρώ ευαγγέλια του SQL Server και δεν θα πρέπει να λείπει από κανένα DBA.

    Όποιος ενδιαφέρεται μπορεί να το κατεβάζει από εδώ.
  9. antonch
    This is copy-paste from the original article
    We’re thrilled to offer another free ebook: Own Your Future: Update Your Skills with Resources and Career Ideas from Microsoft, by Katherine Murray. The ebook contains eight chapters and an appendix describing how you can assess and build your technology-based job skills.
    To give you a sense of the ebook’s content, here is its Foreword, by Microsoft Learning’s Lutz Ziob:

    Foreword

    In the midst of a struggling economy, our fast-changing, knowledge-based economy has created unprecedented challenges for employers and workers alike. Employers increasingly need workers with a broad range of information technology (IT) skills. These skills will become even more important as we continue to retool major sectors of our economy, such as healthcare, transportation and energy. By 2014, more than three-quarters of all jobs in the United States will require some level of computing or technology skills, and the vast majority of newly created jobs will require post-secondary education or training. To meet this demand, students need a solid foundation in science, technology, engineering, math, and design, as well as in related disciplines such as computer science. And this means that workforce training systems need to be improved and expanded to meet the needs of all workers—the underemployed, the unemployed, and students who need better access to the requisite skills. Everyone entering or already in the workforce should have access to the resources they need to become lifelong learners who can adapt to an ever-changing workplace.
    Technology is only one piece of the puzzle, but it has a pivotal role to play in these efforts. It can offer students, workers, and employers the training tools they need, and it can help to quickly and efficiently expand access to educational resources. IT also helps people develop other essential 21st-century skills such as collaboration and teamwork, finding and interpreting information, and using data to aid in decision making.
    In this book, students will find a wealth of Microsoft resources they can
    use to identify the technology skills they need, and gather knowledge and experience to help them take charge of their careers. Here at Microsoft, we care about students’ career success and hope these resources will open doors to learning that will lead them to better opportunities and a deeper understanding of the way technology continues to change and improve the ways people work—both here in the U.S. and around the world.
    Lutz Ziob
    Microsoft Learning General Manager
    You can download the ebook in XPS format here and in PDF format here.
    We hope that you find this material useful. Please leave us a comment and let us know!
  10. antonch
    Η Ερώτηση
    Αυτές τις ημέρες κατά την διάρκεια ενός σεμιναρίου που κάνω και αφορά το administration του SQL Server ένα συνάδελφος είχε μια ερώτηση και αυτή ήταν
    «Πώς μπορώ να δω το χώρο που καταναλώνουν από την buffer cache οι βάσεις που έχω σε ένα SQL Server instance;»

    Μια εύκολη στην απάντηση ερώτηση αλλά πάντα μου αρέσει να ζητώ από αυτόν που ρωτάει το λόγο για τον οποίο θέλει αυτό που ζητάει καθώς θέλω να αποκλείσω την πιθανότητα να ζητάει άλλα και να θέλει άλλα. Σε αυτή την περίπτωση ο συνάδελφος ήταν εξαιρετικά συνεπής και με συγκροτημένη σκέψη. Η απάντηση του ήταν η εξής:
    «Το ζητάω αυτό καθώς έχω ένα SQL Server instance το οποίο έχει αρκετές databases και θέλω να δω ποιες είναι αυτές που έχουν μεγάλες απαιτήσεις μνήμης ώστε να τις μεταφέρω σε κάποιο άλλο SQL Server instance ή να βάλω κάθε μία σε δικό της αν δω ότι είναι απαιτητικές πολύ, ώστε να βελτιωθεί η απόδοση όλων.»

    Εξαιρετική απάντηση!. Βέβαια αυτή η απάντηση είχε έρθει αφού πρώτα είχε γίνει εκτενείς αναφορά για την σχέση του SQL Server με την μνήμη και την buffer cache που αυτός έχει και τον τρόπο με τον οποίο ανεβοκατεβαίνουν οι σελίδες της κάθε database σε αυτή.
    Η ερώτηση απαντήθηκε αλλά επειδή δεν έγραψε το script του υποσχέθηκα ότι θα του το κάνω post ώστε να το έχει αυτός και όλοι όσοι θα ήθελαν να δουν κάτι παρόμοιο.
    περισσότερα
  11. antonch
    Το Madison είναι ένας highly scalable data warehouse προσαρμογέας ο οποίος προσφέρει high performance σε χαμηλό κόστος μέσω μιας Massively Parallel Processing (MPP) αρχιτεκτονικής για τον SQL Server.
    Σε σχέση με τον ανταγωνισμό το Madison προσφέρει “hardware flexibility with configurations from the major hardware vendors and low cost through industry standard hardware”, όπως χαρακτηριστικά λεει η ανακοίνωση.
    Με αυτό το project η Microsoft μεγαλώνει το μέγεθος των data warehouses από τα περίπου 50GB που είναι σήμερα πάνω από το 1 Petabyte μέσω scaling out, αυτή την στιγμή έχουν φτάσει στα 20 nodes.
    Μέχρι σήμερα στην δοκιμή αυτή συμμετέχουν 10 πελάτες της Microsoft από 7 διαφορετικές επιχειρηματικές δραστηριότητες. Τα πρώτα αποτελέσματα είναι εντυπωσιακά όπως
    Data loading rate 1 TB / hour Processing query executions > 1,5 ΤΒ / min Για να συμμετέχει κάποιος σε αυτό το CTP θα πρέπει να έχει κάποιες προϋποθέσεις που έχουν ορισθεί, και ο αριθμός των συμμετεχόντων θα είναι περιορισμένος. Για όσους επιθυμούν να συμμετέχουν σε αυτό θα πρέπει να στείλουν mail στο [email protected]
    Για περισσότερες πληροφορίες για το Madison Project θα βρείτε εδώ
    · Madison Website: http://www.microsoft.com/sqlserver/2008/en/us/madison.aspx
    · SQL Server 2008 Website: http://www.microsoft.com/sqlserver/2008/en/us/default.aspx
  12. antonch
    Πριν από μερικές μέρες μου ήρθε ένα ερώτημα από ένα φίλο για το τι είναι το C2 Level Auditing στον SQL Server. Δράττω την ευκαιρία αυτή για να το εξηγήσω σε όλους όσους ενδιαφέρονται να παρακολουθήσουν στενότερα το περιβάλλον τους στον SQL Server.
    Εδώ και πολλά χρόνια όπως ξέρουμε τεράστια ποσά έχουν δαπανηθεί στο να έχουμε ασφαλή συστήματα. Αυτό γίνεται με το να οροθετούνται συνεχώς νέα πρότυπα και standards. Οι λόγοι για κάτι τέτοιο είναι βέβαια προφανείς αλλά ποτέ κανείς δεν έπαθε τίποτα από την επανάληψη τους διότι όπως έλεγαν οι αρχαίοι (δυστυχώς μόνο αυτοί) πρόγονοι μας "Η επανάληψη είναι η μητέρα της μάθησης", έτσι θα τους επαναλάβω εν τάχει.
    · Να εντοπισθεί η κακομεταχείριση του συστήματος και να αποτραπεί η συνέχεια αυτής.
    · Να αποδοθούν οι συνέπειες σε αυτούς που είναι υπεύθυνοι για την κακομεταχείριση του συστήματος.
    · Να γίνουν οι ενέργειες που θα φέρουν το σύστημα στην προγενέστερη κατάσταση του, πριν δηλαδή από την υφιστάμενη κακομεταχείριση του.
    Τι είναι όμως το C2;
    Το Υπουργείο Άμυνας των ΗΠΑ έχει ορίσει μια σειρά από επίπεδα για το security level των υπολογιστικών συστημάτων τα οποία βασίζονται στις δυνατότητες τους αλλά και στο πως αυτά προσπελάζονται.
    Με βάση όλα αυτά από την έκδοση του SQL Server 2000 η Microsoft παρέχει την δυνατότητα να έχω C2 Level για το περιβάλλον του SQL Server. Εδώ θα πρέπει να πως ότι ο SQL Server είναι ήδη από τότε C2 Level certified (και μην με ρωτήσετε από πού, αυτό νομίζω ότι είναι προφανές). Για παράδειγμα θα πω ότι ο SQL Server ότι όλα τα δεδομένα τα οποία βγαίνουν από το C2 (files) βγαίνουν μόνο σε NTFS partitions.
    To C2 δημιουργεί auditing records για όλα τα server level events του SQL Server όπως shutdown. restart, successful & failed login attempts. Επίσης παρέχει την δυνατότητα να παρακολουθεί τα permissions σε database objects σε DDL, DCL, DML statements.
    Η πληροφορία που καταγράφεται περιέχει
    timestamp identifier για τον account το οποίο έκανε trigger το event target server name event type success or failure outcome application name server process ID database name Πώς ενεργοποιώ το C2 Auditing Level;
    Αυτό μπορώ να το κάνω με δύο τρόπους, ο πρώτος τρόπος είναι από το Server Properties windows (δεξί κλικ στο όνομα του server μέσα στο SSMS) όπως παρακάτω

    Ο δεύτερος τρόπος είναι με T-SQL commands όπως παρακάτω


    Code Snippet


    USE master GO sp_configure 'show advanced option', 1 GO RECONFIGURE GO sp_configure 'c2 audit mode',1 GO RECONFIGURE GO



    Σε κάθε περίπτωση απαιτείται restart του SQL Server για την ενεργοποίηση του!
    Από το σημείο αυτό και μετά στο data directory που έχουμε ορίσει για τον SQL Server Instance μας π.χ. C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA παράγονται αρχεία της μορφής audittraceΥΥΥΥΜΜDDHHMMSS.trc. Κάθε τέτοιο αρχείο μπορεί να φτάσει τα 200MB. Σε αυτή την περίπτωση δημιουργείται νέο αρχείο το οποίο περιέχει την συνέχεια. Επίσης θα πρέπει να τονίσω ότι στην περίπτωση που γεμίσει ο δίσκος που είναι τα C2 files τότε ο SQL Server σταματάει αυτόματα. Σε αυτή την περίπτωση θα πρέπει να ξεκινήσουμε το SQL Server service με το διακόπτη -f και μετά να ελευθερώσουμε χώρο στο δίσκο.
    Τα αρχεία αυτά μπορούμε να τα διαβάσουμε με δύο τρόπους. Ο ένας τρόπος είναι χρησιμοποιώντας τον SQL Server Profiler. Ο άλλος τρόπος είναι να τα δούμε σε μορφή πίνακα ώστε να τα κάνουμε manipulate με queries όπως παρακάτω


    Code Snippet


    SELECT *  FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default)



     
    Βέβαια έχω την δυνατότητα να δω μόνο αυτά που θέλω πχ θέλω μόνο τα failed logins π.χ


    Code Snippet


    SELECT *  FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default) WHERE TextData like '%Login failed%'



     
    Μερικές χρήσιμες πληροφορίες
    Υπάρχει όπως είναι κατανοητό κάποιο performance penalty, μιας και πρέπει να γράφονται πράγματα στο δίσκο. Σε αυτή την την περίπτωση καλό είναι να γράφονται σε ξεχωριστό φυσικό δίσκο (όχι partition). Στην περίπτωση που δεν μπορεί να γίνει καταγραφή των συμβάντων ο SQL Server δεν ξεκινάει. Στον SQL Server 2008 υπάρχει εναλλακτικός τρόπος για την καταγραφή των συμβάντων τόσο σε επίπεδο server όσο και σε επίπεδο database. (θα ασχοληθώ με αυτό σε άλλο post)
  13. antonch
    Η Microsoft ανακοίνωσε και έβγαλε στην διάθεση του κοινού την πρώτη CTP έκδοση του Microsoft SQL Server Migration Assistant (SSMA) 2005 & 2008 (δύο ξεχωριστά). Όπως χαρακτηριστικά η εταιρεία λέει “. is a toolkit that dramatically cuts the effort, cost, and risk of migrating from MySQL to SQL Server. SSMA for MySQL v1.0 CTP1 provides an assessment of migration efforts as well as automates schema and data migration”.
    Download links
    Microsoft SQL Server Migration Assistant 2005 for MySQL v1.0 CTP1 Microsoft SQL Server Migration Assistant 2008 for MySQL v1.0 CTP1
  14. antonch
    Admin σε εταιρεία έχει ένα server στον οποίο έχει στήσει SQL Server. Ο server αυτός είναι για αποκλειστική χρήση του SQL Server, και έχει 12GB RAM.

    O admin αποφάσισε να δώσει τα 6GB από τα 12GB στον SQL Server.

    Σε ερώτηση γιατί το έκανε αυτό μιας και o server θα έχει αποκλειστικά SQL Server έδωσε την παρακάτω απάντηση:

    "Μπορεί κάποιος που είναι στο δύκτιο να θελήσει λίγο περισσότερη μνήμη, να μην έχω να του δώσω!" []
  15. antonch
    Τις τελευταίες μέρες κάνω διάφορα πειράματα και δοκιμές στον SQL Server 2008 πάνω σε Windows Server 2008 R2.
    Έτσι έφτιαξα μια μηχανή στην οποία ήθελα να έχω περισσότερα από ένα instances του SQL Server 2008.
    Έστησα το πρώτο έκανα και τα απαραίτητα updates & restarts και πήγα να στήσω το δεύτερο. Με το που ξεκίνησε μου βγάζει το μήνυμα

    “Invoke or BeginInvoke cannot be called on a control until the window handle has been created.”

    ‘Επειτα από μια έρευνα που έκανα βρήκα ότι αυτό γίνεται εξαιτίας της αλλαγής συμπεριφοράς που έχει το .NET Framework τόσο στον Windows Server 2008 R2, όσο και στα Windows 7, που αφορά το πως γίνεται handle τα UI dialogs με αποτέλεσμα σε κάποιες περιπτώσεις να βγάζει το μήνημα αυτό. Μάλλον είναι bug αλλά για να είμαι σίγουρος θα περιμένω την επιβεβαιώση. Από ότι φαίνεται αυτό θα το συναντήσουμε και στην R2 έκδοση του SQL Server 2008.
    Το καλό βέβαια είναι ότι δεν δημιουργεί ιδιαίτερο πρόβλημα μιας και αν αμέσως ξαναξεκινήσεις το setup αυτό θα προχωρήσει κανονικά.
    Φιλικά
    Αντώνης
  16. antonch
    Αρκετές φορές μέσα από τα μαθήματα που κάνω για τον SQL Server όταν αναφέρω ότι το datetime έχει σαν βάση την 1/1/1753 οι μαθητές μου με ρωτάνε το λόγο.
    Ο λόγος είναι ο εξής όπως τον εξηγεί όμορφα ο Tibor Karaszi

    There are historical reasons for this limitation. In what we sometimes refer to as the "Western world," there have been two calendars in modern times: the Julian and Gregorian calendars. These calendars were a number of days apart (depending on which century you looked at), so when a culture that used the Julian calendar moved to the Gregorian calendar, it removed from 10 to 13 days. Great Britain made this shift in 1752. (So, in that year, September 2, 1752 was followed by September 14, 1752.)
    An educated guess as to why Sybase SQL Server—the predecessor of Microsoft SQL Server—selected 1753 as the earliest date is that if you were to store a date earlier than 1753, you would also have to know which country was using which calendar and also handle this 10- to 13-day jump. So Sybase decided to not allow dates earlier than 1753. Note, too, that other countries made the shift later than 1752. Turkey, for instance, did it in 1927.
    Being Swedish, I find it amusing that Sweden had the weirdest implementation. Sweden originally planned to skip every February 29, leap day, over a period of 40 years (from 1700 to 1740) so that Sweden would be in sync with the Gregorian calendar after 1740 (but meanwhile not in sync with anyone else). However, in 1704 and 1708 the leap day wasn't skipped for some reason, so in 1712 (which was a leap year), Sweden inserted yet one more extra day (imagine being born in Feb 30!) and then made the shift over a day, in 1753, in a similar manner to everyone else.
    By Tibor Karaszi, SQL Server MVP

  17. antonch
    Μια από τις αγαπημένες functions που την χρησιμοποιώ αρκετά συχνά ιδιαίτερα σε περιπτώσεις που υπάρχει κάποιο πρόβλημα με συγκεκριμένη βάση είναι η fn_dblog.
    Παρόλο που είναι μια undocumented function εντούτοις είναι ευρέως γνωστή και φυσικά χρησιμοποιούμενη σε όσους σοβαρά ασχολούνται με τον SQL Server.
    Φυσικά είναι μια εναλλακτική λύση για να διαβάσεις τα περιεχόμενα του transaction log καθώς υπάρχουν και άλλοι τρόποι όπως η DBCC LOG και η DBCC LOGINFO που και αυτές είναι undocumented.
    Αυτό που με κάνει να χρησιμοποιώ την fn_dblog() είναι το γεγονός ότι μπορώ να πάρω τα δεδομένα μου σε μορφή table χωρίς να χρησιμοποιώ τεχνικές με temporary tables, καθώς επίσης μπορώ να έχω filtering σε αυτά με ένα απλό where statement πάνω σε αυτή.
    Η fn_dblog δέχεται δύο παραμέτρους τις @start και @end οι οποίες στην ουσία είναι από – έως LSN (Log Sequence Number) και σκοπό όπως είναι αυτονόητο έχουν να περιορίσουν το αποτέλεσμα στο δοσμένο διάστημα των LSNs. Φυσικά μπορείς να περάσεις την τιμή null και στις δύο εφόσον θέλεις να δεις όλο το Transaction Log.
    Στην περίπτωση που θέλεις να δεις το Transaction Log πχ της AdventureWorks2008R2 μπορείς σε ένα query window να δώσεις τα παρακάτω
    use AdventureWorks2008R2
    go

    select * from fn_dblog(null,null)
    go

    Το αποτέλεσμα που θα πάρεις είναι τεράστιο (117 πεδία) και δεν μπορεί να απεικονισθεί ολόκληρο αλλά ένα μικρό δείγμα από αυτό φαίνεται στην παρακάτω εικόνα





    Η χρησιμότητα της συγκεκριμένης function είναι σημαντική καθώς μπορείς να βρεις αν πχ ένα transaction σου είναι μέσα στο backup σου ή να μάθεις πως δουλεύει το checkpoint και πολλά ακόμα…


    Δεν θα ασχοληθώ με αυτά καθώς μπορείτε εύκολα να τα βρείτε στο web με μια απλή αναζήτηση.


    Το πρόβλημα


    Θα ασχοληθώ όμως με κάτι το οποίο αντιμετώπισα όταν άρχισα να χρησιμοποιώ την εν λόγο function και αυτό αφορά το πώς θα την χρησιμοποιήσω με συγκεκριμένες τιμές στις παραμέτρους που δέχεται.


    Όπως ανάφερα παραπάνω η συγκεκριμένη function παίρνει δύο παραμέτρους οι οποίες σου δίνουν την δυνατότητα να περιορίσεις το αποτέλεσμα σου μεταξύ δύο διαφορετικών LSNs (από – έως LSN).


    Βλέποντας το αποτέλεσμα που επιστρέφεται από αυτή στην κολώνα Current LSN, η οποία στην ουσία είναι και αυτή που φιλτράρεται, θα υποθέσει κανείς ότι με τον ίδιο τρόπο θα περάσω και τις τιμές σε αυτές. Αμ δεν είναι έτσι…


    Τι είναι το LSN;


    Για να μπορέσω να δώσω την λύση σε αυτό το πρόβλημα επιστράτευσα τις γνώσεις μου στην ανάγνωση αυτού του «περίεργου αριθμού» που ονομάζεται LSN και τις οποίες πρέπει να μοιραστώ μαζί σας ώστε να γίνει κατανοητή η λύση του.


    Ξεκινώντας θα πρέπει να καταλάβουμε τι είναι το LSN και καλύτερος τρόπος για να μάθουμε για αυτό δεν είναι άλλος από τα BOL όπου στο link αυτό υπάρχει η ερμηνεία του.





    «Every record in the SQL Server transaction log is uniquely identified by a log sequence number (LSN). LSNs are ordered such that if LSN2 is greater than LSN1, the change described by the log record referred to by LSN2 occurred after the change described by the log record LSN.


    The LSN of a log record at which a significant event occurred can be useful for constructing correct restore sequences. Because LSNs are ordered, they can be compared for equality and inequality (that is, , >, =, , >=). Such comparisons are useful when constructing restore sequences.»



    Επίσης εκεί υπάρχει μια αρκετά σημαντική σημείωση





    «LSNs are values of data type numeric(25,0). Arithmetic operations (for example, addition or subtraction) are not meaningful and must not be used with LSNs. »



    Έχοντας αυτό σαν βασική γνώση που όμως δεν φτάνει καθώς θα πρέπει να γνωρίζουμε το Transaction Log Physical Architecture είμαστε σε θέση να μπορούμε αρχικά να διαβάζουμε και να εξηγούμε – κατανοούμε αυτόν τον «περίεργο αριθμό».


    Τα τρία μέρη του LSN


    Όπως έχετε δει ο αριθμός αυτός χωρίζεται σε τρία μέρη:



    Το πρώτο μέρος δείχνει το sequence number του Virtual Log File (VLF).

    Το δεύτερο μέρος δείχνει το offset του log block.

    Το τρίτο μέρος δείχνει τον αριθμό του slot μέσα στο log block.


    Έτσι αν πάρουμε από την παραπάνω εκτέλεση της function το πρώτο LSN που είναι ο 00000030:00000084:0001 και το μεταφράσουμε θα δούμε ότι



    Το VLF sequence number είναι το 00000030 ήτοι 0x30 ήτοι 48 στο δεκαδικό

    Το log block offset είναι το 00000084 ήτοι 0x84 ήτοι 132 στο δεκαδικό

    Το slot number είναι το 1


    Εκτελώντας την DBCC LOGINFO παίρνουμε το παρακάτω αποτέλεσμα





    Από το VLF sequence number μαθαίνουμε ότι είναι το 3o VLF (FSeqNo=48) το οποίο μάλιστα είναι ενεργό (Status=2), αρχίζει από το offset 925696 και το μέγεθος του είναι 458752.


    Επιβεβαιώνοντας πλέον το LSN μπορούμε να περάσουμε σωστά τις παραμέτρους στην fn_dblog.


    H λύση


    Έτσι το 00000030:00000084:0001 γίνεται 48:132:1 και αν πχ θέλουμε να διαβάζουμε μέχρι εκεί αρκεί να δώσουμε το παρακάτω query


    SELECT * FROM fn_dblog(null,N'48:132:1')

    Και το αποτέλεσμα μας θα είναι αυτό που ζητήσαμε !!!





    Keep Rocking with SQL Server


    /*antonch*/
  18. antonch
    Εδώ και καιρό ήθελα να ασχοληθώ και να γράψω ένα άρθρο με αυτό το θέμα.
    Ένα θέμα το οποίο προσωπικά θεωρώ ότι είναι από τα καλύτερα και δυνατότερα κομμάτια του SQL Server. Με το που το είδα στον SQL Server 2005 (εδώ εμφανίστηκε για πρώτη φορά) έκανα σαν μωρό παιδί που του πήρανε καινούργιο παιχνίδι. Και αυτό γιατί όπως οι περισσότεροι γνωρίζεται είμαι στην μεριά των developers. Από το παρελθόν (21 χρόνια είμαι επαγγελματικά στο χώρο της πληροφορικής) έχω ασχοληθεί με distributed applications, queuing system, asynchronous systems programming. Οι εμπειρίες μου σε μερικές περιπτώσεις είναι τραυματικές με τέτοια συστήματα όπως επίσης και οι χιλιάδες γραμμές κώδικα που έχω γράψει για να υλοποίησω τέτοιες λύσεις. Κυρίως θα ήθελα να τονίσω ότι για να υλοποιηθούν τέτοιες λύσεις θα πρέπει να κάνεις να δουλέψουν σωστά πολλά διαφορετικά εργαλεία και τεχνολογίες.
    Όταν πρωτοείδα τον Service Broker είπα μέσα μου εδώ έχει "ψωμί". Αυτό το "ψωμί" θα προσπαθήσω να το μοιραστώ μαζί σας σε περισσότερα από δύο posts (γιατί το θέμα είναι μεγάλο και δύσκολο).
    Ο Service Broker είναι μια message-queuing τεχνολογία που είναι ενσωματωμένη στον SQL Server, η οποία επιτρέπει στους developers να κάνουν πλήρως intergate τον SQL Server σε distributed applications, μιας και τους παρέχει ένα asynchronous σύστημα για database to database communication. Τι σημαίνει αυτό; ‘Οτι με την χρήση του μπορείς από μια database να στείλεις μηνύματα σε μια άλλη database χωρίς να χρειάζεται να περιμένεις για reponse, πράγμα που σημαίνει ότι οι εφαρμογές θα συνεχίσουν να δουλεύουν ακόμα και όταν η δεύτερη δεν είναι διαθέσιμη.
    Ο Service Broker σαν ένα καθαρόαιμο message-queuing σύστημα δουλεύει με το να στέλνει μηνυματα (messages) τα οποία περιέχουν δεδομένα σε ένα QUEUE. Τα messages παραμένουν αποθηκευμένα στο Queue μέχρι το σύστημα να έχει τα διαθέσιμα resources ώστε να τα επεξεργαστεί κάνοντας τις ενέργειες που το καθένα απαιτεί.
    Έτσι με το Service Broker μπορώ να έχω καλύτερο scalability και resource management καθώς επίσης έχω και τις εγγυήσεις ότι κανένα message που έχει σταλθεί δεν θα χαθεί όπως επίσης και ότι αυτά επεξεργασθούν ακριβώς με την σειρά που μπήκαν στο queue. O Service Broker εγγυάται 100% αξιοπιστία κάτι που δύσκολα, για να μην πω καθόλου, θα το συνατήσεται σε άλλα παρόμοια συστήματα.
    Στον SQL Server 2008 έγιναν μερικές σημαντικές αλλαγές κυρίως στην διαχείρiση μέσα απο Management Studio, τις οποίες θα δούμε αργότερα
    Μέχρι εδώ καταλάβατε τι είναι ο Service Broker;
    Πιθανές απαντήσεις
    Α. ΝΑΙ, προχωράμε λοιπόν παρακάτω
    Β. ΟΧΙ, ξαναδιαβάζουμε το άρθρο από την αρχή
    Είμαι σίγουρος ότι πολλοί αναρωτιέστε που μπορείτε να χρησιμοποιήσετε το Service Broker. Ας δώσω μερικά παραδείγματα.
    Παράδειγμα Α
    Ας υποθέσουμε ότι έχουμε μια εταιρία που έχει δύο sites ( Α και Β ) όπου στο κάθε ένα έχει από μια βάση σε SQL Server. Έστω ότι έχω ένα transaction (distributed) το οποίο ξεκινάει από μια διαδικασια στην database του Α site και το οποίο ενημερώνει την τοπική database αλλα και την database στο Β site.
    Στην περίπτωση που το Β site δεν είναι διαθέσιμο τι θα γίνει με το transaction αυτό;
    Σωστά σκεφτήκατε θα γίνει rollback.
    Όμως αν αντί να ενημερώνω το B (με την λογική του distibuted transaction) έστελνα ένα μήνυμα με την πληροφορία που θέλω να πάει στον Β Service Broker (κατά την διάρκεια του transaction στο A site ) τότε ακόμα και όταν το Β site δεν είναι διαθέσιμο το transaction το οποίο έχω ξεκινήσει στο A site θα είναι committed. Απλά το Β site θα μάθει τι θα κάνει όταν είναι ξανα στον αέρα και αφού διαβάσει τα μηνύματα που του έχουν έρθει. Εδώ θα πρέπει να επισημάνω ότι αν για οποιοδήποτε άλλο λόγο το transaction στο A site γίνει rollback και το μήνυμα το οποίο στάλθηκε στο B site θα γίνει και αυτό rollback. Μήπως θυμάται κανείς σας τι έπρεπε να κάνετε στο κοντινό παρελθόν με COM+ και Messege Queue Service;
    Παράδειγμα Β
    Ας υποθέσουμε ότι θέλουμε να εκτελέσουμε ένα περίπλοκο batch ή query μέσα από την εφαρμογή μας το οποίο είναι και χρονοβώρο. Θα ξεκινούσαμε την εκτέλεση και θα περιμέναμε μέχρι να τελειώσει. Φανταστήτε να γινόνταν η εκτέλεση αυτή μέσα από μια εφαρμογή. Ο χρήστης που την εκτελούσε δεν θα μπορούσε να κάνει τίποτα άλλο μέσα από την εφαρμογή μέχρι αυτή να τελειώσει. Και για να προλάβω κάποιους που θα μου πουν ότι θα το έβαζαν να τρέξει σε ξεχωριστό thread και όλα καλά, απλά να τους θυμίσω τις γραμμές κώδικα που έχουν γράψει για να το πετύχουν αυτό.
    Σε αυτή την περίπτωση θα μπορούσα να στείλω ένα μήνυμα στον Service Broker και αυτός να αναλάβει την εκτέλεση του κάποια στιγμή που δεν θα υπάρχει φόρτος εργασίας.
    Εννοείται βέβαια ότι δεν υπάρχει περίπτωση να χρησιμοποιήσουμε τον Service Broker όταν θέλουμε real time transactions ή θέλουμε να έχουμε άμεσες απαντήσεις. Επίσης εννοείται ότι δεν εκτελούμε SELECT σε μια remote database. Γενικά τον Service Broker τον χρησιμοποιούμε σε σενάρια όπως Asynchronous triggers, Bulk processing, Distributed order processing.
    Με την παραπάνω παράγραφο στο μυαλό μας ελπίζω να σας έδωσα την πραγματική και πρακτική αξία του Service Broker. Αν πραγματικά το βρήσκετε ενδιαφέρον και προκείτε να το αξιοποιήσετε προχωρήστε παρακάτω, αλλιώς ζητώ συγνώμη για τον μέχρι τώρα χρόνο σας. ( ει, δεν θα φύγει κανείς, έχει και συνέχεια!!!)
    Ποία όμως είναι η Αρχιτεκτονική του Service Broker;.
    Βασικά είναι μια ξεκάθαρη client/server αρχιτεκτονική.
    Ένα Service Broker application αποτελείται από ένα client service το οποίο ξεκινάει ένα διάλογο και ένα receiving service το οποίο δέχεται και επεξεργάζεται τα μηνύματα. Κάθε service αντιστοιχίζεται σε ένα queue. O συνδετικός κρίκος ανάμεσα στο service και στο queue είναι το contract το οποίο ορίζει το τύπο του μηνυματος (message) το οποίο στέλνεται από το service στο queue. H ανταλλαγή μηνυμάτων μεταξύ δύο services λέγεται conversation dialog.

    Τί είναι το Service;
    Το service είναι ένα endpoint για το διάλογο του Service Broker. Αυτό είτε μπορεί να είναι ένα service το οποίο ξεκινάει τον διάλογο αυτό (initiating-sending service) με την αποστολή του μηνύματος, είτε είναι ο αποδέκτης (target-receiving service), αυτό δηλαδή που λαμβάνει το μήνυμα από το queue. Κάθε service αντιστοιχίζεται σε ένα queue και σε ένα contract το οποίο ορίζει το τύπο του μηνύματος το οποίο στέλενται στο queue, διασφαλίζοντας το conversation contract.

    Τί είναι το Queue;
    Είναι με απλά λόγια ο κουβάς με τα μηνύματα (εντάξει δεν είναι χύμα στο κύμα αλλά επιτρέψετε μου για χάρη ευκολίας και αστείου να το λέω έτσι). Κάθε queue μπορεί να έχει αντιστιχοιθεί με πολλά services (διαφορετικά, μην ξεχνιώμαστε). Ακόμα κάθε queue μπορεί να συνδεθεί με μια stored procedure η οποία θα εκτελείται κάθε φορά που ένα νέο μήνυμα μπαίνει στον κουβά, δίνοντας μου την δυνατότητα να επεξεργάζομαι το μήνυμα άμεσα (θεικό ε;). Όμως μπορώ να έχω και διαφορετικούς τρόπους επεξεργασίας των μηνυμάτων όπως π.χ. χρησιμοποιόντας τον SQL Server Agent και τα jobs του. Επίσης κάθε queue μπορώ να το έχω active ή όχι χωρίς να πειράζω την όλη υλοποίηση μου (σαν να ήταν ένα service του λειτουργικού).
    Στο σημείο αυτό θα ήθελα να δώσω μερικές χρήσιμες, πιστεύω, παρατηρήσεις για το queue.
    · Εάν το sending και το receiving service είναι στο ίδιο SQL Server instance τότε μπορούν να μοιράζονται το ίδιο queue, αλλιώς διαφορετικά queues.
    · Εάν το receiving queue είναι σε άλλο SQL Server instance ή δεν είναι για κάποιο λόγο ενεργό (active), το μήνυμα θα πρέπει να μπαίνει στο transmission queue για της βάσης όπου το sending service ανήκει. Αυτό ισχύει και αντίστροφα. Χρησιμοποιόντας την view sys.transmission_queue μπορούμε να δούμε τα εκκρεμή μηνύματα.
    Τί είναι το Message;
    Κάθε μήνυμα είναι στην ουσία μια γραμμή στο queue. To format του ορίζεται από το τύπο του μηνύματος (message type) από το contract που υπάρχει ανάμεσα σε δύο services. Μπορεί να είναι empty, well-formed XML, XML το οποίο είναι valid ως προς κάποιο σχήμα ή να περιέχει binary data.

    Τί είναι το Dialog Conversation;
    Αντιπροσωπεύει την ανταλλαγή των μηνυμάτων μεταξύ δύο services. Τα μηνύματα μέσα σε ένα τέτοιο διάλογο μπαίνουν στο queue με την σειρά με την οποία στάλθηκαν. Ο διάλογος σταματάει όταν κάποια από τις εφαρμογές που συμμετέχουν σε αυτόν σταματήσει την συμμετοχής της είτε εκτελώντας την END CONVERSATION εντολή είτε υπάρχει error. Εάν δεν χρησιμοποιήσουμε την παραπάνω εντολή ο διάλογος παραμένει ανοικτός στην database που ανήκει. Με την sys.conversation_endpoints μπορώ να δω τους ενεργούς διαλόγους.
    Κάθε διάλογος διασφαλίζει τα παρακάτω:
    1. Guaranteed delivery
    Ο Service Broker είναι ένα reliable messaging system. Αυτό σημαίνει ότι ο αποστολέας του μηνύματος είναι σίγουρος ότι ο παραλήπτης θα πάρει το μήνυμα αυτό ακόμα και αν κατά την διάρκεια της αποστολής δεν είναι διαθέσιμος.
    2. Long-lived
    Τα dialogs συνήθως ζουν για μερικά δευτερόλεπτα, αλλα μπορούν να ζήσουν και χρόνια ολοκλήρα εφόσον έχω long-running business processes.
    3. Exactly once (αυτό μου αρέσει πολύ)
    Η αποστολή του μηνύματος μέσα από τον διάλογο στον Service Broker μου εγγυάται την μοναδικότητα του μηνύματος. Δηλαδή, ακόμα και αν το initiator service πρέπει να ξαναστείλει το ίδιο μήνυμα επειδή κάτι πήγε στραβά, τότε και τα δυο θα πάνε στον παραλήπτη αλλά μόνο το ένα από τα δυο θα γίνει processes. To άλλο αυτόματα θα διαγραφεί. ( ρε παιδία δεν καιρός να δούμε τον exchange server σε SQL Server database;)
    4. In-order delivery
    Διασφαλίζει ότι τα μηνύματα θα παραληφθούν με την ίδια σειρά που εστάλησαν.
    5. Persistence
    Ένας Service Broker dialog επιβιώνει μετά από restart του database server, επειδή τα messages και οι dialogs είναι persisted απευθείας στην database. Αυτό σημαίνει ότι ακόμα όλα τα l open dialogs αλλά και τα unprocessed messages είναι persisted αυτόματα και γίνονται ξανά διάθεσιμα όταν ξεκινήσει ξανά το database engine service!!!.

    Τί είναι τα Conversation Groups;
    Κάθε conversation group εμπεριέχει έναν ή περισσότερους διαλόγους και επιτρέπει στον Service Broker εύκολα να βρήσκει τα conversations που εμπλέκονται σε μια συγκεκριμένη εργασία. Η σημασία τους είναι τεράστια και αυτό διότι εαν πχ μια εφαρμογή στέλνει ή παίρνει ένα μηνυμα ο SQL Server κλειδώνει το group στο οποίο το μήνυμα ανήκει με σκοπό να παραγματώσει αυτό που είπαμε παραπάνω το EOIO delivery (exactly once in order).

    Τί είναι το Contract;
    To contract ορίζει τον τύπο του μηνύματος που το service χρησιμοποίει για να πραγματώσει την διαδικασία. Είναι η συμφωνία μεταξύ δύο services για το τι το κάθε ένα παίρνει και στέλνει στην επικοινωνία μετάξυ τους . Επίσης διασφαλίζει ότι μόνο οι τύποι των μηνυμάτων που έχουν ορισθεί στο contract θα γίνουν processes.

     
    Τί είναι το Service Broker Endpoint;
    Εάν δύο services σε ένα conversation είναι σε διαφορετικά instances του SQL Server χρειάζεται να δημιουργήσουμε ένα Service Broker endpoint το οποίο θα δέχεται τα incoming and outgoing TCP/IP connections σε συγκεκριμένη πόρτα. 'Ενα SQL Server instance μπορεί να έχει ένα και μόνο ένα Service Broker endpoint το οποίο γίνεται shared σε όλα τα services στο instance αυτό.
    Τί είναι τα Remote Service Bindings;
    Τα Remote Service Bindings χρησιμοποιούνται για να ορίσουμε το security context με το οποίο το initiating service συνδέεται στο remote service το οποίο είναι σε διαφορετικό instance του SQL Server. Τα Remote Service Binding χρησιμοποιούν certificate το οποίο δένεται με συγκεκριμένο database user account για να συνδεθούμε στο remote instance.
    Τί είναι τα Routes;
    Ο Service Broker χρησιμοποιεί τα routes για να εντοπίσει το service με το οποίο θα στείλει το μήνυμα. Εάν δεν υπάρχει κάποιο route το οποίο να είναι συνδεδεμένο με το το service τοτε by default ο Service Broker θα κάνει παράδοση του μηνύματος στο τρέχων instance. Ένα route περιέχει το όνομα του service με το οποίο γίνεται η σύνδεση, το ID του Service Broker instance το οποίο κάνει host το service, και το network address του remote Service Broker endpoint.
    Εδώ λέω να σταματήσω το πρώτο μέρος. Ελπίζω το θέμα αυτό να σας αρέσει. Περιμένω τα σχόλια σας για αυτό.
  19. antonch
    Εισαγωγή
    Αν και δεν είμαι αρκετά σίγουρος ότι όλοι έχουν καταλάβει ότι θα πρέπει να αποφεύγουν όπως ο διάολος το λιβάνι τα implicit conversions εντούτοις αυτό είναι κάτι γνωστό και πηγή δεινών αν αυτό γίνεται στην T-SQL. Υπάρχουν αρκετά άρθρα που το αναφέρουν αυτό και με αυτό το post θα συμπληρώσω και εγώ ακόμα ένα παράδειγμα με σκοπό μήπως και κάποιοι συνετιστούν και σταματήσουν να το κάνουν.
    Αυτό το post αποφάσισα να το γράψω μετά από ένα πραγματικό γεγονός που έγινε σε πραγματικό περιβάλλον εργασίας και το οποίο δημιουργούσε αρκετά προβλήματα.
    Για να γίνει κατανοητό αυτό ας έρθουμε να δούμε ένα παράδειγμα και για αυτό το λόγο ας έρθουμε να φτιάξουμε μια βάση με ένα πίνακα που θα παίξει το ρόλο του πειραματόζωου και θα είναι ένας πίνακας πελατών όπου η απόφαση που έχουμε είναι να υπάρχει το ΑΦΜ σαν σημείο αναφοράς για το record άρα και primary key. Σε αυτόν θα βάλουμε 10.000 rows. Όλα αυτά μπορούν να γίνουν με τα παρακάτω script
    περισσότερα
×
×
  • Create New...