إعادة قراءة كتلة من البلوكشين
⚠️ للمستخدمين المتقدمين فقط. تتم جميع الإجراءات على مسؤوليتك الخاصة. قد تؤدي التغييرات الخاطئة في قاعدة البيانات إلى فقدان أو تكرار المعاملات. تأكد من فهم كل خطوة قبل المتابعة.
المشكلة
بسبب إعادة تنظيم الكتل في شبكة إيثريوم، قد تكون المعاملة المؤكدة على البلوكشين مفقودة من النظام. يحدث هذا عندما تعالج المعالجة كتلة من فرع سلسلة مؤقت (مُهمَل) وتتخطى الكتلة المقابلة من السلسلة الرئيسية. لاستعادة الحالة الصحيحة، تحتاج إلى تشغيل إعادة قراءة الكتلة المطلوبة يدويًا.
الحل
1. إنشاء نسخة احتياطية من قاعدة البيانات
bash
sudo -u postgres pg_dump dv-processing > /tmp/dv-processing_backup_$(date +%Y%m%d_%H%M%S).sqlتحقق من إنشاء الملف وأنه غير فارغ:
bash
ls -lh /tmp/dv-processing_backup_*.sql2. (!مهم — في طرفية منفصلة) إيقاف المعالجة
bash
sudo systemctl stop dv-processing3. (في الطرفية الرئيسية) التبديل إلى مستخدم قاعدة البيانات
bash
sudo su
sudo su - postgres4. (في الطرفية الرئيسية) تشغيل psql
bash
psqlأو
bash
/home/dv/embedded/usr/local/pgsql/bin/psql -p 54335. (في الطرفية الرئيسية) الاتصال بقاعدة بيانات dv-processing
sql
\c dv-processing6. (في الطرفية الرئيسية) قراءة حالة التحليل الحالية
sql
select number from processed_blocks where blockchain = 'bsc';!مهم — تذكر النتيجة:
number ---------- 81923203 (1 row)
7. (في الطرفية الرئيسية) تحديث القيمة إلى الكتلة -1 من معاملتك
مثال للمعاملة 0xffe238ba2c1e028a8ec1c467cef53fa59112e2ccc922dc64345817f9da0f4e71 — الكتلة 81921203:
sql
update processed_blocks set number = 81921203 where blockchain = 'bsc';8. (!مهم — في طرفية منفصلة) تشغيل المعالجة
bash
sudo systemctl start dv-processing9. (في الطرفية الرئيسية) بعد دقيقتين، تحقق من تقدم الكتل
يجب أن تزداد القيمة بعشرات أو مئات من 81921203 — وهذا يشير إلى إعادة قراءة ناجحة للكتلة.
sql
select number from processed_blocks where blockchain = 'bsc';10. (!مهم — في طرفية منفصلة) إيقاف المعالجة
bash
sudo systemctl stop dv-processing11. (في الطرفية الرئيسية) استعادة قيمة الكتلة إلى ما دونته في الخطوة 6
sql
update processed_blocks set number = 81923203 where blockchain = 'bsc';12. (!مهم — في طرفية منفصلة) تشغيل المعالجة
bash
sudo systemctl start dv-processingبعد ذلك، من المرجح أن تُلتقط المعاملة.