[MSSQL] SQL Server 2019 container: Restore Database

หลังจาก 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 สำหรับทดสอบเชื่อมต่อก่อนครับ

จบไปแล้วครับ ตอนนี้มี Database สำหรับ Project ใหม่เรียบร้อย

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.