در مطلب پیشین توضیح دادیم که برای انجام یک بازیابی (ریکاوری) کامل پایگاه داده و بازگرداندن تمامی تغییرات و اثرات تراکنش های نهایی شده که پیش از خرابی پایگاه داده رخ داده بودند، باید از فایل های online redo log پشتیبان یا آرشیو ایجاد کنیم. اگر پایگاه داده در حالت ARCHIVE MODE باشد، پس پیش از آنکه فرایند LGWR مجدد روی یک فایل online redo log بازنویسی کند، فرایند ARCn یک پشتیبان یا آرشیو از آن ایجاد خواهد کرد.

اما گاهی اوقات لازم است تا به صورت دستی و با اجرای دستوری باعث شویم یا به عبارت دیگر پایگاه داده اوراکل را مجبور کنیم تا اصطلاحا یک log switch انجام دهد، به این معنی که فرایند LGWR نوشتن روی فایل online redo log فعلی را قطع کند و سپس به سراغ فایل بعدی برود تا فرایند ARCn از محتوای فایل قبلی یک آرشیو ایجاد کند.

مفهوم Log Switch و Log Sequence Number چیست

یک log switch نقطه ای است که در آن پایگاه داده روند نوشتن بر روی یک فایل online redo log را قطع می کند و شروع به نوشتن را بر روی فایل دیگری انجام می دهد. زمانی که یک فایل online redo log پر می شود عمل log switch انجام می شود و فرایند LGWR ادامه نوشتن را بر روی فایل دیگر انجام می دهد. اما در برخی موارد نیز می توان بلاجبار و به صورت دستی و با اجرای دستور، عمل log switch را انجام داد. اوراکل در دو زمان عددی منحصر به فرد به نام log sequence number را اختصاص می دهد:

۱ – هر زمان که یک log switch انجام می دهد یک عدد log sequence number به آن اختصاص می دهد.

۲ – زمانی که پایگاه داده فایل online redo log را آرشیو می کند عدد log sequence number را برای آن نگهداری می کند.

مفهوم Log Switch و Log Sequence Number چیست

یک log switch نقطه ای است که در آن پایگاه داده روند نوشتن بر روی یک فایل online redo log را قطع می کند و شروع به نوشتن را بر روی فایل دیگری انجام می دهد. زمانی که یک فایل online redo log پر می شود عمل log switch انجام می شود و فرایند LGWR ادامه نوشتن را بر روی فایل دیگر انجام می دهد. اما در برخی موارد نیز می توان بلاجبار و به صورت دستی و با اجرای دستور، عمل log switch را انجام داد. اوراکل در دو زمان عددی به نام log sequence number را یک واحد افزایش می دهد.

۱ – هر زمان که یک log switch انجام می دهد عدد log sequence number یک واحد افزایش می کند.

۲ – زمانی که پایگاه داده فایل online redo log را آرشیو می کند عدد log sequence number را برای فایل آرشیو شده نگهداری می کند.

بنابراین به زبان ساده log switch زمانی رخ می دهد که فرایند LGWR نوشتن روی یک گروه online edo log (یا فایل online redo log) را رها کند و به سراغ گروه بعدی (فایل بعدی) برود. بنابراین با بروز log switch عدد log switch number یک واحد افزایش پیدا می کند. در این زمان وضعیت فایل قبلی ACTIVE و وضعیت فایل فعلی CURRENT خواهد بود. همچنین اگر پایگاه داده درحالت ARCHIVELOG باشد، فرایند ARCn در حال پشتبان گیری و آرشیو سازی از فایل قبلی خواهد بود.

کاربرد و دلیل نیاز به Log Switch Number

بنابراین هر یک از فایل های online redo log و archive log توسط عدد log switch number خودشان قابل شناسایی شدن هستند. همانطور که گفتیم برای انجام instance recovery نیاز ببه محتوای فایل های online redo log است، حتی آن فایل هایی که پیش از این آرشیو شده بودند.

همچنین توضیح داده بودیم که هر زمان که log switch انجام می شود یک واحد به عدد log switch number اضافه می شود و هر زمان که از فایل یک آرشیو ایجاد می شود، عدد log switch number فعلی برای این فایل آرشیو شده نگهداری می شود، پس نتیجه می گیریم که از طریق عدد log switch number می توانیم به یک فایل یا بهتر بگوییم به یک سری از رکوردهای redo log در گذشته تا حال دسترسی داشته باشیم، پس برای انجام instance recovery از این عددها و به صورت صعودی (کوچکترین به بزرگترین عدد) استفاده می شود تا instace و کل پایگاه داده را به حالتی در پیش از خرابی ببریم که پایگاه داده در حالت سازگار (consistance) قرار دارد.

انجام Log Switch اجبای

هر زمان که فرایند LGWR نوشتن روی فایل های یک گروه redo log را رها کند و به سراغ فایل دیگری برود و یا به عبارت دیگر هر زمان که یک گروه پر شود و فرایند به سراغ گروه دیگر برود، یک log switch خودکار انجام می شود ولی در اوراکل دو دستور زیر وجود دارند که از آنها برای انجام log switch اجباری و دستی استفاده می شود.

به طور مثال می خواهید پیش از اینکه فایل های گروه فعلی که فرایند LGWR در حال نوشتن بر روی آن است به طور کامل پر شود، یک log switch اجباری انجام دهید، پس باید یکی از دو دستور بالا را اجرا کنید ولی باید بدانید که دستور دوم به دلیل اینکه باید آرشیو سازی را انجام دهد، کند تر از دستور اولی انجام می شود.

در دستور alter system archive log current، واژه current اشاره به فایل فعلی دارد که فرایند LGWR در حال نوشتن بر روی آن است. برای درک بهتر تفاوت میان این دو دستور در ادامه گام هایی که در اثر اجرای دستور alter system switch logfile انجام می شود را توضیح داده ایم.

۱ – یک checkpoint صادر می شود.

۲ – بلافاضله فرایند LGWR بر روی فایل گروه بعدی شروع به نوشتن می کند.

۳ – در پس زمینه فرایند ARCn شروع به آرشیو سازی فایل گروه قبلی می کند.

اگر از محیط RAC (یا کلاستر اوراکل) استفاده می کنید، با اجرای دستور alter sytem archive log current، عملیات log switch بر روی تمامی instance های درون کلاستر انجام می شود ولی دستور alter system switch logfile را اجرا کنید، عملیات log switch تنها در همان instance انجام می شود که دستور صادر شده است. از این رو دستور alter system archive log current با اینکه کند تر است ولی برای محیط کلاستر اوراکل، دستوری بهتر است.