Παρουσιάστηκε ένα κρίσιμο σφάλμα 1c. Σφάλμα μετατροπής βάσης πληροφοριών. C, επαναφέροντας τη διαμόρφωση της βάσης πληροφοριών χρησιμοποιώντας MS SQL

Όταν εργάζεστε στο 1C:Enterprise, ενδέχεται να εμφανιστεί το ακόλουθο μήνυμα: "Για να εργαστείτε με τη νέα έκδοση του 1C:Enterprise, η βάση πληροφοριών πρέπει να μετατραπεί." Γιατί εμφανίζεται αυτό το παράθυρο και πώς μπορώ να επιλύσω το σφάλμα;

Στις περισσότερες περιπτώσεις, ο λόγος για την εμφάνιση του παραθύρου είναι μια πρόσφατη μετάβαση του προγράμματος από μια παλιά έκδοση της πλατφόρμας σε μια νεότερη. Σε διαφορετικές πλατφόρμες βάση πληροφοριών 1Cδιαμορφώνεται με τον δικό του τρόπο και παίρνει διαφορετική σύνθεση. Το μόνο που χρειάζεται να γίνει είναι να μετατραπεί η βάση δεδομένων (η δομή της οποίας αντιστοιχεί στην ξεπερασμένη πλατφόρμα) στην πιο πρόσφατη μορφή.

Μετατροπή βάσης δεδομένων

Αυτή η διαδικασία είναι απλή, ωστόσο, συνιστάται να δημιουργήσετε πρώτα ένα αντίγραφο ασφαλείας της βάσης δεδομένων σε περίπτωση που παρουσιαστεί σφάλμα κατά τη μετατροπή (για παράδειγμα, ο υπολογιστής απενεργοποιηθεί, με αποτέλεσμα βάση πληροφοριών 1C, όπως και το ίδιο το πρόγραμμα, μπορεί να είναι κατεστραμμένο). Στη συνέχεια εφαρμόστε τον ακόλουθο αλγόριθμο ενεργειών:

  • Ανοίξτε τη βάση δεδομένων σε λειτουργία διαμόρφωσης.
  • Θα δείτε ένα μήνυμα που σας ζητά να μετατρέψετε τη βάση πληροφοριών. Κάντε κλικ στην επιβεβαίωση.

  • Κλείστε τον διαμορφωτή.

Ανοίξτε τη βάση δεδομένων - θα πρέπει να ξεκινήσει χωρίς προβλήματα. Εάν το παράθυρο σφάλματος συνεχίσει να εμφανίζεται μετά τη μετατροπή, μπορείτε να δοκιμάσετε ξανά τη διαδικασία. Εάν αυτό δεν βοηθήσει, πρέπει να επικοινωνήσετε με έναν προγραμματιστή 1C. Μερικές φορές το πρόγραμμα μπορεί να παγώσει κατά την εκτέλεση μιας λειτουργίας. Δεν χρειάζεται να προβείτε σε καμία ενέργεια αυτή τη στιγμή.

Σπουδαίος! Βάση πληροφοριών 1Cπου έχει μετατραπεί από την πιο πρόσφατη έκδοση του προγράμματος δεν μπορεί να ανοιχτεί σε προηγούμενες εκδόσεις.

Ιστορικό

Χρειαζόταν να δημιουργήσουμε ένα νέο μητρώο πληροφοριών "MessageTrackingLog". Προστέθηκε στη διαμόρφωση, φορτώθηκαν τα δεδομένα. Μετά ήρθε η εργασία βελτιστοποίησης. Έπρεπε να αλλάξω τη δομή του μητρώου. Αλλά δεν ήταν εκεί!

Όλα είναι ξεκάθαρα εδώ. Οι εγγραφές έχουν γίνει μη μοναδικές, πρέπει να τις διαγράψετε!

Ο ευκολότερος τρόπος είναι:

NewRecord = InformationRegisters.MessageTrackingLog.CreateRecordSet(); NewRecord.Write();

Χρησιμοποιώντας αυτήν τη μέθοδο, θα καθαρίσουμε το μητρώο στο 1C πολύ γρήγορα (αλλά αυτό θα είναι και δικό μας λάθος).

Λάθος

Φαίνεται ότι το μητρώο είναι κενό και μπορείτε να ενημερώσετε το 1C. Δεν θέλω να σας εκπλήξω, αλλά θα υπάρξει ξανά ένα σφάλμα:


Τι αντιπροσωπεύει το σφάλμα:

Παρουσιάστηκε ένα κρίσιμο σφάλμα κατά τη διαδικασία ενημέρωσης της βάσης πληροφοριών
εξαιτίας:
Προσπαθώντας να εισαγάγετε μια μη μοναδική τιμή σε ένα μοναδικό ευρετήριο:
Microsoft SQL Server Native Client 11.0: Η δήλωση CREATE UNIQUE INDEX τερματίστηκε επειδή βρέθηκε ένα διπλότυπο κλειδί για το όνομα αντικειμένου "dbo._InfoRgChngR34546NG" και το όνομα ευρετηρίου "_InfoR34546_ByNodeMsg_RNTSRRRRRRNG". Η διπλότυπη τιμή κλειδιού είναι (0x00000011,d7, , 27 Σεπτεμβρίου 4015 10:22 μ.μ., 768404,00,00,00,00,00,00).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, κατάσταση=1, Σοβαρότητα=10, εγγενής=1505, γραμμή=1

Εξήγηση

Ας κατανοήσουμε τη δομή της SQL. Έχουμε μητρώο "MessageTrackingLog", στην SQL βρίσκεται στον πίνακα " _InfoR34546". Μπορείτε να το ελέγξετε χρησιμοποιώντας ειδική επεξεργασία ή τη μέθοδο "poke" (δεν χρειάζεται να το κάνουμε αυτό επειδή το όνομα του πίνακα αναφέρεται ήδη στο κείμενο σφάλματος).

Τώρα θα εξηγήσω τι έγινε. Όταν φορτώσαμε τα δεδομένα στον καταχωρητή, στην SQL κατέληξαν στον πίνακα" _InfoR34546". Όταν καθαρίσαμε τον πίνακα με κωδικό στο 1C, αυτά τα δεδομένα διαγράφηκαν από τον πίνακα" _InfoR34546", αλλά αντιγράφηκαν στον πίνακα" _InfoRgChngR34546". Αυτό έγινε το πρόβλημα.

Λύση

Για να λύσουμε αυτό το πρόβλημα, πρέπει να διαγράψουμε τον πίνακα SQL "_InfoRgChngR34546".

Θα σας πω χρησιμοποιώντας το παράδειγμα του "Microsoft SQL Server Management Studio". Ας πάμε στο " Management Studio". Βρείτε τη βάση δεδομένων μας, ανοίξτε την καρτέλα των πινάκων, κάντε κλικ σε οποιοδήποτε και κάντε κλικ στο κουμπί "Νέο ερώτημα": Τώρα πληκτρολογούμε το ερώτημα

Περικοπή πίνακα "_InfoRgChngR34546"

Μπορεί να έχετε άλλο τραπέζι! Μην ξεχάσεις!

Και πατήστε execute ή πατήστε "F5". Αυτό πρέπει να είναι το αποτέλεσμα:

Αυτό ήταν, τώρα μπορείτε να ενημερώσετε με ασφάλεια το 1C και δεν θα υπάρξουν σφάλματα!

Μεταφερθήκαμε σε νέο διακομιστή. Τρέχει SQL και 1C. Σε σύγκριση με τα παλιά ήταν πολύ πιο δροσερό. Και το τεστ του Gilev το επιβεβαίωσε επίσης: έναντι 10-15 στους παλιούς διακομιστές, έδωσε 39. Επομένως, αμέσως μετά την αγορά, μεταφέραμε τη βάση δεδομένων και αρχίσαμε να δουλεύουμε.

Αλλά κάποια στιγμή κάτι πήγε στραβά - οι χρήστες άρχισαν να παραπονιούνται για αργή εργασία. Κάναμε ορισμένες ρυθμίσεις για τον διακομιστή και τις υπηρεσίες (οι οποίες είναι το θέμα μιας ξεχωριστής ανάρτησης) και αποφασίσαμε να κάνουμε επανεκκίνηση του διακομιστή, ευτυχώς η ταχύτητα επανεκκίνησης ήταν 2 λεπτά (σε άλλους διακομιστές ήταν έως και 10). Μετά από αυτό, κατά τη σύνδεση στο 1C λαμβάνουμε το ακόλουθο μήνυμα:

"Προσοχή!!! Παρουσιάστηκε σφάλμα κατά την ενημέρωση των δεδομένων μετά την τελευταία αναδιάρθρωση. Πρέπει να επαναλάβω την ενημέρωση; "Όχι πραγματικά"

Αφού κάνετε κλικ στο "Ναι" εμφανίζεται το εξής:

«Εντοπίστηκε μια ατελής λειτουργία αποθήκευσης διαμόρφωσης. Πρέπει να ολοκληρώσετε τη λειτουργία για να συνεχίσετε».

Το πρώτο πράγμα που αποφάσισα να κάνω ήταν το CHECKDB στο Managment Studio - μετά από 2 ώρες αναμονής (βάση δεδομένων 500 GB) - όλα ήταν εντάξει.

Βρήκα πληροφορίες στο Διαδίκτυο ότι το ίδιο σφάλμα παρουσιάζεται κατά τη δυναμική ενημέρωση.

Οι λύσεις που προτάθηκαν διαδικτυακά δεν βοήθησαν άμεσα, αλλά μαζί με άλλες ενέργειες έδωσαν αποτελέσματα. Λοιπόν αυτό που έκανα:

Λύση:

  1. Τι έλειπε για λύσεις από το δίκτυο:

sp_configure 'να επιτρέπονται οι ενημερώσεις', 1
επαναδιαμόρφωση με παράκαμψη
πηγαίνω

2. Θέστε τη βάση δεδομένων σε λειτουργία ανάκτησης

αλλαγή συνόλου βάσης δεδομένων ΕΚΤΑΚΤΗΣ ΑΝΑΓΚΗΣ, SINGLE_USER

3. Πραγματοποιούμε δοκιμές βάσης δεδομένων:

dbcc checkdb('db_name', REPAIR_ALLOW_DATA_LOSS)

4. Κλείστε τη βάση δεδομένων από τη λειτουργία ανάκτησης:

αλλαγή συνόλου βάσης δεδομένων ONLINE, MULTI_USER

5. Κατ 'αρχήν, εάν είστε σίγουροι ότι όλα είναι εντάξει με την ίδια τη βάση, τότε δεν χρειάζεται να κάνετε τα σημεία 2-4. Στη συνέχεια, εκτελούμε δύο ερωτήματα στο SQL profiler:

διαγραφή από το config όπου FileName = 'commit'
διαγραφή από το config όπου FileName = 'dbStruFinal'

Αυτές οι εγγραφές είναι υπεύθυνες για τη δυναμική ενημέρωση - δεν χρειάζεται να φοβάστε να τις διαγράψετε.

Σε εκδόσεις εργασίας των ερωτημάτων βάσεων δεδομένων:

επιλέξτε * από το Config WHERE FileName = 'commit'

επιλέξτε * από το Config WHERE FileName = 'dbStruFinal'

θα είναι άδεια.

6. επιστρέψτε τις ρυθμίσεις:

sp_configure 'να επιτρέπονται οι ενημερώσεις', 0
πηγαίνω

7. Μετά από αυτό, καταφέραμε να εκκινήσουμε το διαμορφωτή και η βάση δεδομένων άρχισε να λειτουργεί.

Επίσης, η βάση μπορεί να αρχίσει να λειτουργεί μετά την αφαίρεση της πρώτης σημαίας.

Sandbox

εξουσία 18 Σεπτεμβρίου 2013 στις 03:24 μ.μ

1C, επαναφορά διαμόρφωσης βάσης πληροφοριών με χρήση MS SQL

Κάποτε αντιμετώπισα ένα πρόβλημα: κατά την ενημέρωση της διαμόρφωσης από το αποθετήριο, παρουσιάστηκε μια αποτυχία και έκλεισε το 1C.

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

Επειδή Αυτό το πρόβλημα έχει προκύψει περισσότερες από μία φορές και αποφάσισα να μοιραστώ μια επιλογή θεραπείας.

Την επόμενη φορά που ξεκινήσατε το πρόγραμμα διαμόρφωσης, εμφανίστηκε ένα σφάλμα: "Προσοχή!!! Παρουσιάστηκε σφάλμα κατά την ενημέρωση των δεδομένων μετά την τελευταία αναδιάρθρωση. Πρέπει να επαναλάβω την ενημέρωση; Εάν η απάντηση είναι ναι, λαμβάνουμε το μήνυμα: «Εντοπίστηκε μια ατελής λειτουργία αποθήκευσης διαμόρφωσης. Για να συνεχίσετε να εργάζεστε, πρέπει να ολοκληρώσετε τη λειτουργία” μετά την οποία η εφαρμογή κλείνει.

Κατά την ανάλυση αυτού του προβλήματος, βρέθηκαν πολλές λύσεις στο πρόβλημα, κάθε λύση λειτουργεί σε διαφορετικές περιπτώσεις.

Επιλογή 1 (εάν έχετε αντίγραφο ασφαλείας SQL με αντίγραφο με ίδια διαμόρφωση):

Ένα αντίγραφο της ασφάλειας πληροφοριών αναπτύσσεται και εκτελείται το ακόλουθο αίτημα:
ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ GO DELETE FROM .. GO INSERT INTO .. ​​SELECT * FROM .. GO
Σε αυτήν την περίπτωση, ο πίνακας στον οποίο είναι αποθηκευμένη η διαμόρφωση ασφάλειας πληροφοριών συμπληρώνεται ξανά. Συνιστάται να ελέγξετε και να διορθώσετε την ασφάλεια των πληροφοριών μετά από αυτή τη λειτουργία.

Επιλογή 2 (αν δεν υπάρχει αντίγραφο ασφαλείας):

Αυτή η επιλογή χρησιμοποιήθηκε ως η σταγόνα που ξεχείλισε το ποτήρι. Επειδή η διαμόρφωση ήταν υπό ανάπτυξη και ξέχασαν λίγο το αντίγραφο ασφαλείας, βασιζόμενοι στην αποθήκευση.
Στη βάση δεδομένων, δύο εγγραφές διαγράφονται από τον πίνακα "Config" από την τιμή στη στήλη "FileName" - dbStruFinal και commit

Εκτελείται το ακόλουθο ερώτημα:
ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ ΜΕΤΑΒΑΣΗ ΔΙΑΓΡΑΦΗ ΑΠΟ . WHERE FileName = "dbStruFinal" GO DELETE FROM. WHERE FileName = "commit" GO
Παραδόξως, η βάση ζωντανεύει.

Ετικέτες: 1C Enterprise 8.2, SQL, επαναφορά ρυθμίσεων

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