หลังจาก Blog ตอนที่แล้ว ลอง Deploy SQL Server 2019 container บน RedHat8 + Podman คราวนี้เรามาลอง Restore Database จากไฟล์ .bak กันครับ
NOTE: MSSQL2019 ชื่อ Container จาก Blog ตอนก่อน
เตรียม Folder Backup
- สร้าง Folder backup ขึ้นมาที่ Path Mount /var/mssql/data หรือ สร้าง Path ข้างใน Container ด้วยคำสั่ง
podman exec -it MSSQL2019 mkdir /var/opt/mssql/data/backup
เอาไฟล์ backup โยนเข้าไป
- ถ้ามีไฟล์อยู่ใน Server อยู่แล้ว สามารถใช้คำสั่ง Copy เข้าไปได้เลย
podman cp KSEC_TEST_20210426.bak MSSQL2019:/var/opt/mssql/backup
- ถ้าไม่มีไฟล์ โยนไฟล์จาก FTP เข้าไปที่ /var/mssql/data/backup ดังตัวอย่าง
ตรวจสอบไฟล์ backup
สำหรับขั้นตอนนี้เป็นการส่องไฟล์ .bak ที่โยนเข้าไปใน Server ว่าข้างในมันมีไฟล์ อะไรบ้างครับ ได้แก่ .mdf / .ldf / .ndf หรือ In Memory Data เป็นต้น
- คำสั่งที่ใช้สำหรับการตรวจสอบไฟล์ มีดังนี้
RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/data/backup/<<YOUR_BACKUP>>.bak"'
- ตัวอย่าง
podman exec -it MSSQL2019 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Password1' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/data/backup/KSEC_TEST_20210426.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
- ผลลัพธ์ที่ได้
- จากผลลัพธ์ที่ได้ พบว่ามีไฟล์ .mdf / .ldf โดยข้อมูลตรงนี้ ถูกเอาไปใช้ในการกำหนด Path ของแต่ละไฟล์ หลัง Restore Database ขึ้นมาใหม่ครับ
Restore ไฟล์ backup
- ขั้นตอนนี้อ้างอิงมาจาก Step ก่อนหน้า คือ เราต้องรู้ก่อนว่าไฟล์ .bak มันซ่อนอะไรไว้ครับ
- คำสั่งที่ใช้สำหรับ Restore ไฟล์ backup
RESTORE DATABASE <<DBNAME>> FROM DISK = "/var/opt/mssql/data/backup/<<YOUR_BACKUP>>.bak" WITH MOVE "PrimaryData" TO "/var/opt/mssql/data/<<YourSubFolder>>/<<Your_MDF_File>>.mdf" , MOVE "UserData" TO "/var/opt/mssql/data/<<YourSubFolder>>/<<Your_NDF_File>>.ndf" , MOVE "LogData" TO "/var/opt/mssql/data/<<YourSubFolder>>/<<Your_LDF_File>>.ldf" , MOVE "InMemory_Data" TO "/var/opt/mssql/data/<<YourSubFolder>>/<<Your_INMEMORYDATA>>"
- ตัวอย่าง
- คำสั่ง จากไฟล์ Backup เราพบว่ามีไฟล์ ดังนี้
- คำสังที่ได้
podman exec -it MSSQL2019 /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA -P ''Password1'' \ -Q 'RESTORE DATABASE KSEC_TEST FROM DISK = "/var/opt/mssql/data/backup/KSEC_TEST_20210426.bak" WITH MOVE "ONEAM" TO "/var/opt/mssql/data/ksec/KSEC_2021.mdf", MOVE "ONEAM_LOG" TO "/var/opt/mssql/data/ksec/KSEC_2021.ldf"'
- ผลลัพธ์ครับ สำหรับ DB ที่ทดสอบก้อนนี้มี Upgrade ข้ามเวอร์ช้่น เลยต้องมี Step Convert เพิ่มเข้ามา
Processed 135152 pages for database 'KSEC_TEST', file 'ONEAM' on file 1. Processed 3 pages for database 'KSEC_TEST', file 'ONEAM_LOG' on file 1. Converting database 'KSEC_TEST' from version 782 to the current version 904. Database 'KSEC_TEST' running the upgrade step from version 782 to version 801. Database 'KSEC_TEST' running the upgrade step from version 801 to version 802. Database 'KSEC_TEST' running the upgrade step from version 802 to version 803. Database 'KSEC_TEST' running the upgrade step from version 803 to version 804. Database 'KSEC_TEST' running the upgrade step from version 804 to version 805. .... Database 'KSEC_TEST' running the upgrade step from version 899 to version 900. Database 'KSEC_TEST' running the upgrade step from version 900 to version 901. Database 'KSEC_TEST' running the upgrade step from version 901 to version 902. Database 'KSEC_TEST' running the upgrade step from version 902 to version 903. Database 'KSEC_TEST' running the upgrade step from version 903 to version 904. RESTORE DATABASE successfully processed 135155 pages in 15.508 seconds (68.086 MB/sec). invsmssql@tm-cep:~$
- ถ้าสังเกตุดีๆ พบว่า Logical Name มันเชื่อมโยงกันครับ ส่วนชื่อไฟล์ อันนีปรับแก้ได้
ทดสอบ Database หลัง Restore
- ตอนนี้ผมขอใช้ user SA และ password Password1 สำหรับทดสอบเชื่อมต่อก่อนครับ
- หลังจาก User SA เชื่อมต่อ Database ได้แล้ว ต่อไปเป็น Step การสร้าง User สำหรับ Application ครับ อันนี้ผมมี Script เตรียมไว้อยู่แล้วครับ [MSSQL] ตัวอย่าง Script ที่ช่วยในการสร้าง User หลัง Restore Database
จบไปแล้วครับ ตอนนี้มี Database สำหรับ Project ใหม่เรียบร้อย
Reference
- Restore a SQL Server database in Docker - SQL Server | Microsoft Docs
- mssql/rhel/server - Certified Container Image - Red Hat Ecosystem Catalog
- [MSSQL] ตัวอย่าง Script ที่ช่วยในการสร้าง User หลัง Restore Database | DebuggingSoft
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.