บทความทั้งหมด

ระบบ
17/08/2026 10

สร้าง Mail Server ด้วย Mailcow แบบ Open-source ที่เปิดให้ใช้งานได้ฟรี โดยรวบรวมเครื่องมือจัดการอีเมลประสิทธิภาพสูงไว้ในที่เดียว

1. Reverse DNS (PTR Record) ส่วนนี้สำคัญมาก แต่คุณไม่สามารถตั้งค่าที่ระบบจัดการโดเมนได้ คุณต้องติดต่อผู้ให้บริการ Server / VPS ที่คุณเช่า IP นี้ไว้ เพื่อให้เขาตั้งค่า PTR Record ให้ครับ: IP Address: 157.85.103.242 ให้ชี้กลับไปที่ (PTR): mail.match.in.th 2. DNS แบบพื้นฐาน (Minimal DNS Configuration) ค่าเหล่านี้จำเป็นต้องมี เพื่อให้สามารถรับส่งอีเมลได้ และเข้าถึงหน้าเว็บของ Mailcow ได้ครับ Name (Host) Type Value (Target) Priority mail A 157.85.103.242 - autodiscover CNAME mail.match.in.th - autoconfig CNAME mail.match.in.th - @ (หรือปล่อยว่าง) MX mail.match.in.th 10 (หมายเหตุ: ชื่อ Name อาจแตกต่างกันตามผู้ให้บริการ DNS บางที่ @ หมายถึงโดเมนหลัก match.in.th) 3. การรับรองอีเมลและป้องกันสแปม (SPF, DKIM, DMARC) จำเป็นต้องตั้งค่าเพื่อไม่ให้อีเมลที่คุณส่งถูกปลายทางมองว่าเป็นสแปม Name (Host) Type Value (Target) @ (หรือปล่อยว่าง) TXT "v=spf1 mx a:mail.match.in.th ~all" _dmarc TXT "v=DMARC1; p=reject; rua=mailto:admin@match.in.th" dkim._domainkey TXT (ดูคำแนะนำด้านล่าง) วิธีนำค่า DKIM มาใส่: ล็อกอินเข้าหน้าเว็บแอดมิน Mailcow (https://mail.match.in.th) ไปที่เมนู Configuration > Mail Setup > Domains เลือกโดเมนของคุณและไปที่ส่วนตั้งค่า DKIM เพื่อกด Generate (หรือคัดลอกค่าที่มี) นำข้อความยาวๆ ที่ได้ (ซึ่งจะขึ้นต้นด้วย "v=DKIM1; k=rsa;...") มาใส่ในช่อง Value ของ DNS (หมายเหตุ: อีเมลใน rua=mailto:... สำหรับ DMARC สามารถเปลี่ยนเป็นอีเมลที่คุณใช้รับรายงานการส่งผ่านอีเมลได้) 4. การตั้งค่าระดับสูง (Advanced DNS Configuration) ส่วนนี้เป็น SRV และ TXT Record ที่ใช้สำหรับการตั้งค่าอีเมลอัตโนมัติบนมือถือ หรือแอปอีเมล (เช่น Outlook, Apple Mail, Thunderbird) Name Type Priority Weight Port Value (Target) _autodiscover._tcp SRV 0 1 443 mail.match.in.th _caldavs._tcp SRV 0 1 443 mail.match.in.th _caldavs._tcp TXT - - - "path=/SOGo/dav/" _carddavs._tcp SRV 0 1 443 mail.match.in.th _carddavs._tcp TXT - - - "path=/SOGo/dav/" _imap._tcp SRV 0 1 143 mail.match.in.th _imaps._tcp SRV 0 1 993 mail.match.in.th _pop3._tcp SRV 0 1 110 mail.match.in.th _pop3s._tcp SRV 0 1 995 mail.match.in.th _sieve._tcp SRV 0 1 4190 mail.match.in.th _smtps._tcp SRV 0 1 465 mail.match.in.th _submission._tcp SRV 0 1 587 mail.match.in.th _submissions._tcp SRV 0 1 465 mail.match.in.th เคล็ดลับเพิ่มเติมในการตั้งค่า: ผู้ให้บริการ DNS บางเจ้าอาจกำหนดให้ต้องใส่จุดต่อท้ายโฮสต์เนมด้วย (เช่น mail.match.in.th.) หากระบบไม่ยอมให้บันทึก ให้ลองเติมจุดต่อท้าย หลังจากตั้งค่าเสร็จแล้ว DNS อาจใช้เวลาอัปเดตตั้งแต่ 5 นาที ถึง 24 ชั่วโมง คุณสามารถเข้าไปตรวจสอบค่าที่ตั้งไปว่าถูกต้องหรือยังผ่านเครื่องมืออย่าง MXToolBox หรือ Mail-tester ได้ครับ   อ้างอิงจากเอกสารระบบของ Mailcow และโครงสร้างการทำงานของการทำเซิร์ฟเวอร์อีเมล ข้อมูลพอร์ตที่จำเป็นต้องอนุญาต (Allow) ใน Firewall เพื่อให้ระบบทำงานได้อย่างสมบูรณ์ มีดังนี้ครับ: ขาเข้า (Inbound / Incoming Ports) คุณต้องเปิดพอร์ตเหล่านี้จากภายนอก (Internet) เข้ามายังเซิร์ฟเวอร์ Mailcow เพื่อให้สามารถรับอีเมลและให้ผู้ใช้งาน (Client) เชื่อมต่อได้ Port Protocol Component (Service) Description 25 TCP Postfix (SMTP) ใช้รับอีเมลจากเซิร์ฟเวอร์อื่น (Server-to-Server) พอร์ตนี้จำเป็นต้องเปิด 80 TCP Nginx (HTTP) ใช้สำหรับเข้าใช้งาน Web UI และการออกใบรับรอง SSL (Let's Encrypt) 110 TCP Dovecot (POP3) ใช้สำหรับ Client ดึงอีเมลแบบไม่เข้ารหัส (หากไม่ใช้งาน สามารถปิดได้) 143 TCP Dovecot (IMAP) ใช้สำหรับ Client เชื่อมต่อซิงค์อีเมล 443 TCP Nginx (HTTPS) ใช้สำหรับเข้า Web UI (Admin/SOGo) อย่างปลอดภัยผ่าน SSL 465 TCP Postfix (SMTPS) ใช้สำหรับ Client ส่งอีเมลผ่านการเข้ารหัสแบบ Implicit TLS 587 TCP Postfix (Submission) ใช้สำหรับ Client ส่งอีเมลผ่านการเข้ารหัสแบบ STARTTLS 993 TCP Dovecot (IMAPS) ใช้สำหรับ Client เชื่อมต่อซิงค์อีเมลอย่างปลอดภัยผ่าน SSL 995 TCP Dovecot (POP3S) ใช้สำหรับ Client ดึงอีเมลอย่างปลอดภัยผ่าน SSL 4190 TCP Dovecot (ManageSieve) ใช้สำหรับจัดการกฎการกรองอีเมล (Filter) ผ่านโปรแกรมเมล์ไคลเอนต์ ขาออก (Outbound / Outgoing Ports) คุณต้องอนุญาตให้เซิร์ฟเวอร์ Mailcow สามารถเชื่อมต่อออกไปยังอินเทอร์เน็ตผ่านพอร์ตเหล่านี้ Port Protocol Component (Service) Description 25 TCP Postfix ใช้สำหรับส่งอีเมลออกจากเซิร์ฟเวอร์ไปหา Mail Server ปลายทาง 80 TCP Rspamd, ClamAV, etc. ใช้ในการดึงข้อมูลอัปเดตระบบ, ดาวน์โหลดแพทช์ และเช็คบัญชีดำ (Blacklist) 443 TCP Rspamd, ClamAV, etc. ใช้ในการอัปเดตระบบตรวจจับสแปม ตรวจจับไวรัส และใบรับรอง Let's Encrypt 465 TCP Postfix ใช้ส่งอีเมลออกแบบเข้ารหัสเมื่อเซิร์ฟเวอร์ปลายทางรองรับ ข้อควรระวัง: พอร์ต 25 (ทั้งเข้าและออก) เป็นพอร์ตที่สำคัญที่สุดในการรับส่งอีเมลระหว่างเซิร์ฟเวอร์ หากผู้ให้บริการอินเทอร์เน็ต (ISP) หรือ Cloud Provider บล็อกพอร์ตนี้ ระบบจะไม่สามารถรับหรือส่งอีเมลไปยังผู้ให้บริการอื่น (เช่น Gmail หรือ Outlook) ได้ครับ   ชุดคำสั่งตั้งค่า UFW รันคำสั่งเหล่านี้ผ่านสิทธิ์ root หรือใช้ sudo ครับ:   ส่วนที่ 2: เปลี่ยนพอร์ต SSH เป็น 55422 2.1 แก้ไขไฟล์ Config ของ SSH # 1. ติดตั้ง UFW (หากยังไม่มีในระบบ) apt update && apt install ufw nano -y # 2. ตั้งค่านโยบายพื้นฐาน (บล็อกขาเข้าทั้งหมด, อนุญาตขาออกทั้งหมด) ufw default deny incoming ufw default allow outgoing # 3. เปิดพอร์ต SSH (สำคัญมาก! ต้องทำเป็นอันดับแรกเพื่อไม่ให้ตัวเองถูกตัดออกจากเซิร์ฟเวอร์) # หากคุณเปลี่ยนพอร์ต SSH เป็นพอร์ตอื่น ให้เปลี่ยนตัวเลข 22 เป็นพอร์ตของคุณ sed -i 's/^#*Port 22/Port 22/' /etc/ssh/sshd_config systemctl restart ssh ufw allow 22/tcp # 4. เปิดพอร์ตทั้งหมดที่จำเป็นสำหรับ Mailcow ufw allow 25,80,110,143,443,465,587,993,995,4190/tcp # 5. เปิดใช้งาน UFW (ระบบจะถามยืนยันการตัดการเชื่อมต่อ ให้ตอบ y) ufw enable # 6. ตรวจสอบสถานะการตั้งค่าทั้งหมด ufw status verbose   ขั้นตอนที่ 1: เตรียมความพร้อมระบบ (System Preparation) ก่อนติดตั้ง ให้ตรวจสอบสิ่งแวดล้อมและตั้งค่าระบบปฏิบัติการดังนี้: ตรวจสอบเวลาของระบบ (Timezone & NTP): Mailcow จำเป็นต้องใช้เวลาที่ตรงเป๊ะ (โดยเฉพาะระบบ 2FA / TOTP) ตั้งเวลาและเขตเวลาของเซิร์ฟเวอร์ให้ถูกต้อง: timedatectl set-timezone Asia/Bangkok apt update && apt install -y chrony ตรวจสอบและลบ Mail Service ตกค้าง (ถ้ามี): บางครั้งการอัปเกรดหรือติดตั้ง Debian อาจมี MTA ติดตั้งมาล่วงหน้า (เช่น Exim หรือ Postfix บนโฮสต์) ซึ่งจะมาแย่งใช้พอร์ต 25: systemctl stop exim4 postfix sendmail 2>/dev/null apt purge -y exim4 exim4-base postfix sendmail-bin ตั้งค่า Hostname ของเครื่องให้ตรงกับ FQDN: hostnamectl set-hostname mail.match.in.th ตรวจสอบไฟล์ /etc/hosts ให้แน่ใจว่าผูกกับไอพีและโฮสต์เนมถูกต้อง: 157.85.103.242 mail.match.in.th mail ขั้นตอนที่ 2: ติดตั้งแพ็กเกจพื้นฐานที่จำเป็น ติดตั้งเครื่องมือพื้นฐานที่ Mailcow ต้องใช้ในการประมวลผลสคริปต์: apt update && apt upgrade -y apt install -y git openssl curl gawk coreutils grep jq ขั้นตอนที่ 3: ติดตั้ง Docker และ Docker Compose Mailcow ทำงานบน Docker ทั้งหมด ติดตั้งเวอร์ชันล่าสุดด้วยสคริปต์ทางการ: # 1. ติดตั้ง Docker Engine curl -sSL https://get.docker.com/ | CHANNEL=stable sh # 2. เปิดใช้งานและสตาร์ท Docker Service systemctl enable --now docker # 3. ตรวจสอบเวอร์ชันของ Docker และ Docker Compose Plugin docker --version docker compose version (ต้องมั่นใจว่า Docker เวอร์ชัน 24.0 ขึ้นไป และ Docker Compose เวอร์ชัน 2.0 ขึ้นไป) ขั้นตอนที่ 4: ดาวน์โหลดและติดตั้ง Mailcow โคลนโปรเจกต์จาก GitHub เข้าไปยังไดเรกทอรี /opt: cd /opt git clone https://github.com/mailcow/mailcow-dockerized mailcow-dockerized cd mailcow-dockerized รันสคริปต์สร้างไฟล์คอนฟิกตั้งต้น: ./generate_config.sh ระบบจะถามข้อมูลสำคัญ ให้ป้อนข้อมูลของคุณ: FQDN of mailcow host: ใส่ mail.match.in.th Timezone: เลือกหรือพิมพ์ Asia/Bangkok ปรับแต่งค่าคอนฟิกเพิ่มเติม (ถ้าจำเป็น): เปิดไฟล์ mailcow.conf เพื่อตรวจสอบหรือแก้ไขค่าพารามิเตอร์ต่างๆ: nano mailcow.conf (ตัวอย่างค่าที่มักปรับแต่ง เช่น HTTP_PORT=80, HTTPS_PORT=443, HTTP_BIND=157.85.103.242 เพื่อระบุ IP ที่ชัดเจน) ปรับแต่งทรัพยากร (ปิด ClamAV & Solr เพื่อประหยัด RAM) (สำหรับทดสอบเท่านั้น): # ปิด Antivirus sed -i 's/SKIP_CLAMD=n/SKIP_CLAMD=y/' mailcow.conf # ปิด Full-text search (Solr) sed -i 's/SKIP_SOLR=n/SKIP_SOLR=y/' mailcow.conf เพิ่ม Header: List-Unsubscribe เตรียมโครงสร้าง Rspamd ล่วงหน้าก่อนรัน mkdir -p data/conf/rspamd/local.d cat << 'EOF' > data/conf/rspamd/local.d/postfilter.lua rspamd_config.ADD_LIST_UNSUBSCRIBE = { callback = function(task) local mime_from = task:get_header('From') if mime_from then task:get_mempool():set_variable('add_header', 'List-Unsubscribe', '<mailto:unsubscribe@match.in.th?subject=unsubscribe>, <https://match.in.th/unsubscribe>') task:get_mempool():set_variable('add_header', 'List-Unsubscribe-Post', 'List-Unsubscribe=One-Click') end end } EOF ขั้นตอนที่ 5: สตาร์ทระบบ Mailcow ดึง Docker Images ทั้งหมดและเริ่มรันระบบเบื้องหลัง: docker compose pull docker compose up -d การดาวน์โหลดและบูตระบบครั้งแรกจะใช้เวลาประมาณ 5–10 นาทีขึ้นอยู่กับความเร็วอินเทอร์เน็ตของเซิร์ฟเวอร์ ขั้นตอนที่ 6: ตรวจสอบและเข้าใช้งานระบบ ตรวจสอบสถานะการทำงานของคอนเทนเนอร์: docker compose ps ทุกคอนเทนเนอร์ควรมีสถานะเป็น Up หรือ running เข้าสู่ระบบผ่าน Web UI: เปิดเว็บบราวเซอร์ไปที่: [https://mail.match.in.th] Username เริ่มต้น: admin Password เริ่มต้น: moohoo คำแนะนำ: เมื่อเข้าสู่ระบบได้แล้ว ให้เปลี่ยนรหัสผ่านแอดมินทันที เพื่อความปลอดภัย

อ่านเพิ่มเติม
Defragment & Optimize Database (MS SQL 2008 R2) ฐานข้อมูล
24/06/2026 27

Defragment & Optimize Database (MS SQL 2008 R2)

แผนภาพรวมการดำเนินการ Defragment & Optimize Database   สเต็ปที่ 1: การสำรองข้อมูลระบบ (Full Backup) เพื่อความปลอดภัยสูงสุดก่อนเริ่มงานสเต็ปที่ 3: รันสคริปต์วิเคราะห์เปอร์เซ็นต์ Fragmentation แยกรายตารางแบบละเอียดสเต็ปที่ 4: ดำเนินการจัดเรียงโครงสร้างข้อมูล (Reorganize / Rebuild Index)สเต็ปที่ 5: อัปเดตสถิติการเข้าถึงข้อมูล (Update Statistics) เพื่อให้คิวรีทำงานได้เร็วที่สุดสเต็ปที่ 6: ตรวจสอบประสิทธิภาพหลังการปรับปรุงและคืนพื้นที่เก็บข้อมูล สเต็ปที่ 1: การสำรองข้อมูลระบบ (Full Backup) เพื่อความปลอดภัยสูงสุดก่อนเริ่มงาน ก่อนที่จะมีการขยับหน้าข้อมูล (Data Pages) หรือสร้างอินเดกซ์ใหม่ สิ่งแรกที่จำเป็นต้องทำคือ การทำ Full Backup เพื่อเป็นหลักประกันว่าหากเกิดเหตุสุดวิสัยระหว่างทาง (เช่น ไฟดับ, ปลั๊กหลุด หรือดิสก์เต็ม) เราจะมีจุดที่ย้อนกลับมาได้ 100% ครับ USE master; GO -- สั่ง Backup ฐานข้อมูล dbwins_VCARGO1911 BACKUP DATABASE [dbwins_VCARGO1911] TO DISK = 'D:\Backup\dbwins_VCARGO1911_BeforeDefrag.bak' WITH FORMAT, MEDIANAME = 'DB_Defrag_Backups', NAME = 'Full Backup before Defrag', COMPRESSION, -- สั่งบีบอัดไฟล์ (ถ้าตัว Edition รองรับ จะช่วยประหยัดพื้นที่ดิสก์ได้มาก) STATS = 10; GO   สเต็ปที่ 2 และ 3: ตรวจสอบพื้นที่ว่าง และ สแกนหาจุดที่กระจัดกระจาย (Analysis, Reorganize/Rebuild Index) เนื่องจากคุณไม่ได้ระบุว่าใช้ SQL Server 2008 R2 รุ่น Standard หรือ Enterprise (ซึ่งมีผลต่อการสั่ง Rebuild แบบ Online) เพื่อความปลอดภัยที่สุด เราจะทำการ "สแกนดูอาการ" ก่อน โดยยังไม่สั่งแก้ไขครับ รบกวนเปิด SSMS แล้วนำสคริปต์ 2 ชุดนี้ไปรันได้เลยครับ (สคริปต์นี้ใช้แค่อ่านข้อมูล ปลอดภัย ไม่มีการล็อกตารางครับ แต่อาจจะใช้เวลาประมวลผลสัก 1-2 นาทีเนื่องจากฐานข้อมูลมีขนาด 13 GB):   สเต็ปที่ 3: เช็คขนาดพื้นที่ข้อมูลปัจจุบัน USE dbwins_VCARGO1911; GO EXEC sp_spaceused; GO   สเต็ปที่ 4: สแกนหาตารางที่มีปัญหา Fragmentation สูงสุด (ระดับวิกฤต) USE dbwins_VCARGO1911; GO DECLARE @db_id INT; SET @db_id = DB_ID(); SELECT OBJECT_NAME(IND.OBJECT_ID) AS TableName, IND.name AS IndexName, CAST(STATS.avg_fragmentation_in_percent AS DECIMAL(5,2)) AS Fragmentation_Percent, STATS.page_count AS PageCount, STATS.index_type_desc AS IndexType FROM sys.dm_db_index_physical_stats(@db_id, NULL, NULL, NULL, 'DETAILED') AS STATS JOIN sys.indexes AS IND ON STATS.OBJECT_ID = IND.OBJECT_ID AND STATS.index_id = IND.index_id WHERE IND.name IS NOT NULL AND STATS.index_level = 0 -- ดึงมาเฉพาะ Leaf Level (ระดับล่างสุดที่เก็บเนื้อข้อมูลจริงๆ) AND STATS.page_count > 10 -- กรองเฉพาะตารางที่เล็กมากๆ (ไม่ถึง 10 หน้า) ทิ้งไป เพื่อไม่ให้ตารางขยะมาบังตา ORDER BY STATS.avg_fragmentation_in_percent DESC; GO   สเต็ปที่ 5: สคริปต์สลายการกระจัดกระจาย (Defragmentation Script) สแกนทุกตารางอัตโนมัติเพื่อเลือกว่าจะ "จัดเรียงใหม่" (Reorganize) หรือ "รื้อสร้างใหม่" (Rebuild) ตามระดับความรุนแรงของปัญหา ช่วยลดภาระการทำงานของเซิร์ฟเวอร์ คืนพื้นที่ว่าง และทำให้ระบบสามารถดึงข้อมูลได้รวดเร็วสูงสุดอีกครั้ง USE [dbwins_VCARGO1911]; GO -- 1. ประกาศตัวแปรรับค่า ID แยกออกมาข้างนอก DECLARE @CurrentDBID INT; SET @CurrentDBID = DB_ID('dbwins_VCARGO1911'); -- 2. สร้างตารางชั่วคราวเก็บข้อมูล IF OBJECT_ID('tempdb..#IndexList') IS NOT NULL DROP TABLE #IndexList; CREATE TABLE #IndexList ( TableName NVARCHAR(255), IndexName NVARCHAR(255), FragPercent FLOAT ); -- 3. ใช้ตัวแปร @CurrentDBID ในการ Query INSERT INTO #IndexList SELECT OBJECT_NAME(STATS.OBJECT_ID), IND.name, STATS.avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats(@CurrentDBID, NULL, NULL, NULL, 'LIMITED') AS STATS JOIN sys.indexes AS IND ON STATS.OBJECT_ID = IND.OBJECT_ID AND STATS.index_id = IND.index_id WHERE IND.name IS NOT NULL AND STATS.page_count > 10 AND STATS.avg_fragmentation_in_percent > 5; -- 4. ใช้ Cursor ปกติ DECLARE @TableName NVARCHAR(255); DECLARE @IndexName NVARCHAR(255); DECLARE @FragPercent FLOAT; DECLARE @SQL NVARCHAR(MAX); DECLARE IndexCursor CURSOR FOR SELECT TableName, IndexName, FragPercent FROM #IndexList; OPEN IndexCursor; FETCH NEXT FROM IndexCursor INTO @TableName, @IndexName, @FragPercent; WHILE @@FETCH_STATUS = 0 BEGIN IF @FragPercent >= 30 BEGIN SET @SQL = 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REBUILD WITH (FILLFACTOR = 90);'; END ELSE BEGIN SET @SQL = 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REORGANIZE;'; END EXEC(@SQL); FETCH NEXT FROM IndexCursor INTO @TableName, @IndexName, @FragPercent; END; CLOSE IndexCursor; DEALLOCATE IndexCursor; DROP TABLE #IndexList; GO   สเต็ปที่ 6: ตรวจสอบประสิทธิภาพ/อัปเดตสถิติ (Update Statistics) หลังการปรับปรุงและคืนพื้นที่เก็บข้อมูล USE [dbwins_VCARGO1911]; GO -- สั่งอัปเดตสถิติของทุกตารางด้วยการสแกนแบบเต็ม EXEC sp_updatestats; GO     เพื่อเป็นการปิดงานอย่างสวยงาม ผมแนะนำให้คุณทำตามนี้ 3 ข้อครับ: 1. ทดสอบการใช้งานจริง: ลองเข้าโปรแกรมแล้วเปิดรายงานที่เคยทำงานช้า (โดยเฉพาะรายงานบัญชีหรือรายงานสินค้าที่ดึงข้อมูลจาก GLDT หรือ ICStockDetail) หากการตอบสนองเร็วกว่าเดิมชัดเจน ถือว่าเราบรรลุเป้าหมายแล้วครับ 2. ตรวจสอบ Error Log: ใน SSMS ให้ลองไปที่ SQL Server Error Log (ในส่วนของ Management) เพื่อดูว่ามี Error อะไรโผล่ขึ้นมาหลังรันสคริปต์ไหม (ถ้าไม่เจออะไร ถือว่าปกติครับ) 3. วางแผนการ Maintenance ระยะยาว: การทำแบบนี้ครั้งเดียวไม่เพียงพอครับ สำหรับฐานข้อมูลที่มีการเขียนข้อมูลตลอดเวลา (Active Database) แนะนำให้ทำ "Rebuild/Reorganize + Update Statistics" เป็นประจำ เช่น เดือนละครั้ง หรือ 2 เดือนครั้ง เพื่อไม่ให้มันสะสมจนกระจัดกระจายหนักเหมือนเดิม USE [dbwins_VCARGO1911]; GO -- 1. เปลี่ยน Recovery Model เป็น SIMPLE ALTER DATABASE [dbwins_VCARGO1911] SET RECOVERY SIMPLE; GO -- 2. รันคำสั่ง CHECKPOINT เพื่อสั่งให้ SQL Server เขียนข้อมูลค้างทิ้งลงไฟล์ .MDF ให้หมดก่อน CHECKPOINT; GO -- 3. สั่ง Shrink ไฟล์อีกครั้ง (ระบุขนาดให้เล็กลง เช่น 100MB ก่อนก็ได้ครับ) DBCC SHRINKFILE (dbERP_New_Log, 100); GO -- 4. เปลี่ยน Recovery Model กลับเป็น FULL (ถ้าจำเป็นต้องใช้) ALTER DATABASE [dbwins_VCARGO1911] SET RECOVERY FULL; GO

อ่านเพิ่มเติม