คำถามติดแท็ก sql-server-2008

SQL Server 2008 (รุ่นบิลด์หลัก 10.00.xxxx) โปรดติดแท็กด้วย sql-server

4
มีเครื่องมือในการทำการเปรียบเทียบข้อมูลระหว่างสอง schema ที่แตกต่างกันหรือไม่?
เรากำลังย้ายฐานข้อมูลของเราไปยังสคีมาใหม่ แต่ต้องการตรวจสอบความถูกต้องของข้อมูลว่าถูกย้ายอย่างถูกต้องแล้ว เครื่องมือเปรียบเทียบข้อมูลแบบดั้งเดิมสามารถเปรียบเทียบสองฐานข้อมูลสำหรับความแตกต่างหากสกีมาเหมือนกัน ในกรณีของเรามีการเปลี่ยนแปลงการออกแบบตาราง แต่ข้อมูลทั้งหมดจาก schema เก่าอยู่ในใหม่มันเพิ่งถูกย้ายไปรอบ ๆ และฉันต้องแน่ใจว่าถูกต้อง เรามีหลายสิบล้านแถวเพื่อให้การตรวจสอบด้วยตนเองไม่ใช่ตัวเลือก มีเครื่องมือใดบ้างที่สามารถช่วยในการเปรียบเทียบประเภทนี้? ถ้าไม่มีไลบรารี่ / กรอบงานใดบ้างที่สามารถช่วยเริ่มต้นพัฒนาโซลูชันที่กำหนดเองได้? ฉันยินดีที่จะใช้โซลูชันเฉพาะฐานข้อมูลหากจำเป็นในกรณีนี้สำหรับ SQL Server 2008 โซลูตรอนของฉัน:ฉันกำลังเปรียบเทียบชุดข้อมูลสองชุดโดยการสร้างหนึ่งVIEWของแต่ละตารางบนฐานข้อมูลเก่าที่มีเขตข้อมูลเดียวกับตารางฐานข้อมูลใหม่ ฉันเปรียบเทียบข้อมูลโดยใช้เทคนิคที่อธิบายไว้ที่นี่: วิธีที่สั้นที่สุดเร็วที่สุดและง่ายที่สุดในการเปรียบเทียบสองตารางใน SQL Server: UNION! ฉันโชคดีในการโยกย้ายครั้งนี้เนื่องจากโครงสร้างของตารางโดยรวมคล้ายกับฐานข้อมูลเก่าโดยมีการย้ายเขตข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่งลดลงหรือเพิ่ม ในกรณีของการตกและเพิ่มไม่มีอะไรที่จะเปรียบเทียบสำหรับเขตข้อมูลที่ย้ายหรือถูกรวมฉันจะคำนวณในมุมมองเพื่อให้ข้อมูลที่ถูกต้องสำหรับการเปรียบเทียบ การUNIONเปรียบเทียบแสดงให้ฉันเห็นเฉพาะแถวที่มีความแตกต่างดังนั้นทันทีที่ข้อมูลถูกต้องฉันจะได้รับชุดผลลัพธ์ที่ว่างเปล่า

2
เหตุใดแบบสอบถามนี้ทำให้เกิดการหยุดชะงัก
เหตุใดแบบสอบถามนี้ทำให้เกิดการหยุดชะงัก UPDATE TOP(1) system_Queue SET [StatusID] = 2, @ID = InternalID WHERE InternalID IN ( SELECT TOP 1 InternalID FROM system_Queue WHERE IsOutGoing = @IsOutGoing AND StatusID = 1 ORDER BY MessageID ASC, InternalID ASC) เพิ่มกราฟการหยุดชะงัก: <keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480"> <owner-list> <owner id="processc6fe40" mode="X"/> </owner-list> <waiter-list> …

1
วิธีค้นหาหน้าเสียหายใน SQL Server 2008
ฉันรู้ว่าฉันสามารถรันDBCC CHECKDBและรับสถานะฐานข้อมูลของฉันได้ คำถาม ฉันจะค้นหาได้อย่างไรหากมีหน้าข้อมูลที่เสียหายในฐานข้อมูลของฉัน หากเกิดข้อผิดพลาดเนื่องจากความเสียหายของหน้าฉันจะพบหน้าไหนที่เสียหาย ฉันจะค้นหาหมายเลขหน้าของแต่ละหน้าที่เสียหายได้อย่างไร ใครสามารถบอกฉันได้ว่าจะหารหัสหน้าเหล่านั้นได้จากที่ใด

2
A Non-DBA ถาม: วิธีการคัดลอก / ย้ายอินสแตนซ์ SQL Server ไปยังเซิร์ฟเวอร์อื่นผ่านทาง Backup / Restore อย่างไม่ลำบาก
เราเพิ่งมีเซิร์ฟเวอร์ใหม่ดังนั้นฉันต้องการคัดลอกอินสแตนซ์ SQL Server 2008 ที่มีอยู่ไปจากกล่องฐานข้อมูลเก่า ปกติแล้วฉันจะทำสิ่งนี้โดยการคัดลอก. mdf และล็อกไฟล์และแนบไฟล์เหล่านั้น แต่ฉันไม่สามารถใช้ dbs off line ได้เนื่องจากพวกเขาใช้งานตลอด 24 ชั่วโมงทุกวันดังนั้นฉันจึงสำรองฐานข้อมูลและเรียกคืนไฟล์ใหม่ เครื่อง อย่างไรก็ตามผมได้จบลงด้วยสองสามประเด็นหนึ่งของพวกเขาที่เกี่ยวข้องกับผู้ใช้กำพร้า ดังนั้นสิ่งที่ฉันกำลังมองหาคือกระบวนการที่ไม่ปลอดภัยในการเคลื่อนย้ายทุกอย่างไปด้วยความยุ่งยาก / รำคาญ / ปวดหัวน้อยที่สุด ฉันเป็น. dev ที่มีจำนวน SQL อยู่พอสมควร แต่การทำงานภายในของ SQL Server ส่วนใหญ่เป็นเรื่องลึกลับสำหรับฉันและฉันพบว่าเอกสาร MS เจ็บปวดต่อการอวนลาก กรุณาช่วย.

1
SQL Server 2008 R2 Dirty อ่านแล้ว - ไม่ใช่อะตอมอย่างไร?
ฉันสงสัยว่า "การอ่านที่สกปรก" สกปรกแค่ไหนนั้นสามารถอยู่ภายใต้ระดับการแยกแบบไม่ต้องอ่านได้ ฉันเข้าใจว่าแถวที่ได้รับการปรับปรุงแล้วแต่ยังไม่ได้มีการยืนยันจะปรากฏให้เห็น แต่: แถวสามารถปรากฏเป็นอัปเดตบางส่วนได้หรือไม่นั่นคือบางคอลัมน์มีการอัปเดตและบางคอลัมน์ไม่ได้ คอลัมน์เดียวสามารถปรากฏการปรับปรุงบางส่วน ตัวอย่างเช่นถ้าคุณมีคอลัมน์ varchar (4000) ที่อยู่ในกระบวนการของการปรับปรุงอย่างสมบูรณ์และสมมติว่ามันมี 4,000 ตัวอักษร คุณสามารถอ่านพูดว่า 2k chars จากสถานะก่อนหน้าและ 2k chars จากสถานะใหม่ได้หรือไม่? แล้ว varchar (สูงสุด) ที่มีความยาว> 8k อัปเดต: หลังจากมีการโต้วาทีความเห็นร่วมขั้นต่ำคือถ้าขนาดคอลัมน์> 8KB ผู้อ่านสกปรกแม้อยู่ในคอลัมน์ก็เป็นไปได้

5
การใช้บรรทัดคำสั่งของ SQL Server? เป็นไปได้ไหม?
ฉันพยายามใช้ SQL Server Management Studio 2008 ที่สร้างขึ้นใน "Solution Explorer" เพื่อจัดการโครงการและหลังจาก 2 สัปดาห์ของการดิ้นรนกับมันฉันตัดสินใจว่าฉันไม่สนใจจริงๆ มันเป็นคุณสมบัติ "ความสะดวกสบาย" ที่จริงแล้วค่อนข้างเป็นอุปสรรค น่าเสียดายที่ที่ที่ฉันทำงานคือร้านขายของ MS และค่อนข้างติดอยู่กับที่ ฉันต้องการกลับไปที่บรรทัดคำสั่ง (ฉันอยากเป็นกลุ่ม!) ฉันได้ติดตั้งที่เก็บโค่นล้มท้องถิ่นด้วย TortiseSVN ส่วนหน้าเพื่อแทนที่ "Solution Explorer" ที่กล่าวถึงข้างต้นและให้มันทำงานได้ค่อนข้างดี ฉันได้ติดตั้ง Vim แล้วและในขณะที่ยังคงปรับแต่งมันอยู่ อย่างไรก็ตามสิ่งหนึ่งที่ฉันยังหาวิธีแก้ไขคือวิธีการเรียกใช้คำสั่งไปยัง SQL Server ผ่านทางบรรทัดคำสั่ง ฉันเคยชินกับพรอมต์บรรทัดคำสั่งของ MySQL / Postgres เพราะนั่นคือสิ่งที่ฉันเคยใช้ในอดีตและใช้ในขณะที่เรียนวิชา อย่างไรก็ตามฉันไม่สามารถหาวิธีเรียกใช้สคริปต์ของฉันผ่านทางบรรทัดคำสั่งใน windows ได้ ขณะนี้ฉันแก้ไขเป็นกลุ่ม, รีเฟรชหน้าเว็บใน SSMS และดำเนินการ ฉันไม่ต้องการแม้แต่แตะที่ SMSS หากจำเป็น ฉันเห็นโพสต์แนะนำ sqlsharp …

5
วิธีที่ดีที่สุดในการค้นหาจำนวนระเบียนที่ไม่มีหมายเลขโทรศัพท์ที่เหมาะสมใน SQL Server คืออะไร?
ฉันมีสาขาที่ผู้คนในอดีตสามารถใช้เพื่อให้คุณค่าได้อย่างอิสระ ฉันต้องระบุระเบียนที่ไม่มีค่าที่เหมาะสมเพื่อให้ฉันสามารถทำความสะอาดได้ ฉันได้ดูรอบนี้ใน SSIS ความชอบของฉันคือการใช้องค์ประกอบสคริปต์ที่มีการแสดงออก regex ในบางรหัส C # ตามด้วยการเปลี่ยนเส้นทาง ถึงกระนั้นฉันก็สงสัยว่ามีวิธีใน SSIS ที่จะทำเช่นนี้โดยไม่ต้องหันไปใช้ C # ฉันไม่ได้มีโชคมากมายในการค้นหาวิธีการค้นหาว่ามีกี่ระเบียนที่ไม่มีหมายเลขโทรศัพท์ที่เหมาะสม

2
“ ใหญ่เกินไป” สำหรับ SQL 2008 Web Edition มีขนาดใหญ่เพียงใด
สำหรับแอปพลิเคชั่นที่จะเป็นโฮสต์ของเราฉันต้องเลือกระหว่าง SQL Server 2008 Web edition และ SQL Server 2008 Enterprise edition ไม่มีฟังก์ชั่น "ต้องมี": แอปพลิเคชันทำงานบน SQL Express ในขณะนี้ แต่จะเกินขนาดสูงสุด 10GB ที่ SQL Express เรียกเก็บ ฉันกำลังดูแผนภูมิเปรียบเทียบนี้และตารางที่สำคัญที่สุดในหน้านี้ "ความยืดหยุ่นและประสิทธิภาพ" เมื่อตารางมีขนาดใหญ่ขึ้นฟังก์ชันการทำงานเช่น "การแบ่งพาร์ติชันของตารางและดัชนี" จึงเป็นสิ่งสำคัญในการรับประกันความเร็ว แต่จะต้องใช้ขนาดโต๊ะแบบไหน? ฉันควรใช้กลยุทธ์ใดในการพิจารณาว่าขนาดและการใช้ฐานข้อมูลของฉันต้องการฟังก์ชันการปรับขนาดองค์กรและประสิทธิภาพหรือไม่

1
มีวิธีที่เชื่อถือได้ในการกำหนดเมื่อคุณควรเรียกใช้ DBCC CLEANTABLE เพื่อเรียกคืนพื้นที่หรือไม่
เมื่อเร็ว ๆ นี้แทนที่จะเพิ่งเพิ่มไฟล์เมื่อพวกเขาใกล้ถึงการใช้ไฟล์ 80% ฉันได้ทำเชิงรุกมากขึ้นในการเรียกคืนพื้นที่ผ่านเทคนิคทั่วไปเช่นการจัดเรียงข้อมูลฮีปเพิ่มและวางดัชนีคลัสเตอร์การใช้การบีบอัดแถวหรือหน้าเป็นต้น แต่มีเพียงไม่กี่กรณีที่ผมสามารถที่จะเรียกคืนพื้นที่มากยิ่งขึ้นโดยการดำเนินการDBCC CLEANTABLE ด้วยฐานข้อมูลหลายร้อยในสภาพแวดล้อมของฉันมันเป็นไปไม่ได้ที่จะรู้ว่าสิ่งที่ผู้ใช้ทำในแต่ละคนและเป็นที่ยอมรับอย่างสมบูรณ์ว่าจะมีการเปลี่ยนแปลงที่เกี่ยวข้องกับการลดลงของคอลัมน์ความยาวคงที่ ฉันมักจะพบโอกาสเหล่านี้โดยดูที่การนับแถวกับจำนวนหน้าในสคริปต์การใช้พื้นที่วัตถุบางอย่างที่ฉันเขียน ฉันต้องการดำเนินการขั้นตอนต่อไปโดยพยายามตรวจจับสถานการณ์เหล่านี้โดยอัตโนมัติ สิ่งที่ฉันอยากรู้คือถ้ามีใครบางคนกำลังติดตามโอกาสประเภทนี้อย่างกระตือรือร้นและถ้าเป็นเช่นนั้นคุณมองหาอะไรเป็นพิเศษ ความคิดของฉันคือการเขียนบางอย่างตามแนวการรวบรวมขนาดสูงสุดและต่ำสุดของแถวจำนวนแถวในตารางจำนวนหน้าที่จัดสรรและจำนวนหน้าที่ใช้แล้วทำคณิตศาสตร์พื้นฐานเพื่อบันทึกผลลัพธ์ที่ อยู่ข้างนอกสิ่งที่จะ "คาดหวัง"


1
จะอนุญาตให้ใช้งานโพรซีเดอร์ที่เก็บไว้ แต่ไม่ได้เขียนได้อย่างไร
ฉันต้องการตั้งค่าผู้ใช้ "อ่าน" บนอินสแตนซ์ SQL Server 2012 ของฉัน ฉันต้องการอนุญาตให้เขามีสิทธิ์ดำเนินการกระบวนงานที่เก็บไว้หรือฟังก์ชันหรือคำสั่ง SQL โดยตรงซึ่งดึงข้อมูลจากตารางและมุมมองทั้งหมด แต่ไม่อัปเดตหรือแทรก (เช่นอ่านอะไรและเขียนอะไร) ฉันสามารถตั้งค่านี้ได้โดยไม่ให้สิทธิ์เฉพาะกับแต่ละฟังก์ชั่นหรือขั้นตอนการจัดเก็บตามชื่อ แต่ให้สิทธิ์การดำเนินการที่ถูกต้องกับฟังก์ชั่นใด ๆ หรือขั้นตอนการจัดเก็บ จะมีอะไรเปลี่ยนแปลงไหมถ้าฉันใช้ SQL Server 2008 แทน ชี้แจงและเพิ่มเติม: หากขั้นตอนการจัดเก็บเปลี่ยนแปลงข้อมูลผู้ใช้ควรได้รับข้อความแสดงข้อผิดพลาด (ปฏิเสธการแก้ไขหรือปฏิเสธการเข้าถึงขั้นตอนการจัดเก็บทั้งหมด) หากวิธีแก้ไขที่เป็นไปได้เกี่ยวข้องกับการปฏิเสธสิทธิ์ฉันจะไม่ให้สิทธิ์บางอย่างแทนการปฏิเสธได้หรือไม่ สามารถใช้การปฏิเสธกับตารางทั้งหมดมุมมอง ฯลฯ (มีอยู่ทั้งในปัจจุบันและในอนาคต) ในฐานข้อมูลในคำสั่งเดียวได้หรือไม่

3
ประสิทธิภาพที่แย่ลงบนเซิร์ฟเวอร์ใหม่
เราอยู่บนเซิร์ฟเวอร์เฉพาะ (quad-core เดียว, RAM 6 GB) และกำลังย้ายไปยังเซิร์ฟเวอร์เฉพาะใหม่ (2x hex-core, 32 GB RAM) ทั้งสองเป็น Windows Server 2008, SQL Server 2008 ประสิทธิภาพการทำงานบนเซิร์ฟเวอร์ใหม่นั้นแย่กว่าเซิร์ฟเวอร์เก่าที่ช้ากว่าเล็กน้อย ในการทดสอบแอปพลิเคชัน ASP.NET ของเราทำงานช้าลง 10 - 20% การเรียกใช้ข้อความค้นหาราคาแพงทีละรายการด้วยสถิติ IO และสถิติเวลาแสดงเวลาที่ผ่านไปมากกว่า 10 - 20% บนเซิร์ฟเวอร์ใหม่ โปรไฟล์การสืบค้นข้อมูล SQL แสดงการใช้งาน CPU ที่สูงขึ้นสำหรับการสืบค้นที่มีราคาแพง ตัวจัดการงานบนเซิร์ฟเวอร์ใหม่แสดงให้เห็นว่า sqlserver.exe ใช้ RAM ขนาด 22 GB แต่ค่าของ CPU ยังคงต่ำอยู่เสมอ ฉันได้อัปเดตสถิติทั้งหมดสร้างใหม่หรือจัดดัชนีใหม่ ฯลฯ …

5
ฉันจะตรวจพบโพรซีเดอร์ที่เก็บที่เสียหายหลังจากการเปลี่ยนแปลงสกีมา
ฉันได้แก้ไขตารางกลางในฐานข้อมูลของฉันและ sp_depends ส่งคืนผลลัพธ์หลายร้อยรายการอย่างแท้จริงและฉันกังวลว่าบางขั้นตอนการจัดเก็บอาจไม่ได้รวบรวมอีกต่อไปหลังจากการเปลี่ยนแปลงของฉัน การตรวจสอบหนึ่งโพรซีเดอร์ที่เก็บไว้นั้นง่ายมาก (ฉันเพิ่งรันสคริปต์แก้ไขและดูว่าการดำเนินการสำเร็จหรือไม่) แต่การทำอย่างนั้นกับ 100 โพรซีเดอร์นั้นค่อนข้างยุ่งยาก ฉันรู้ว่าฉันสามารถใช้สคริปต์เช่นนี้เพื่อรวบรวมวัตถุทั้งหมดของฐานข้อมูลของฉันได้ แต่การดำเนินการจริงจะเกิดขึ้นในครั้งต่อไปที่มีการเรียกใช้กระบวนงานที่เก็บไว้ไม่ใช่ทันทีดังนั้นจึงไม่เหมาะสมในกรณีของฉัน ฉันยังคิดว่าฉันสามารถลบโพรซีเดอร์ที่เก็บไว้ทั้งหมดและปรับฐานข้อมูลของฉันใหม่ด้วยระบบควบคุมแหล่งที่มาของฉัน แต่ตัวเลือกนั้นถึงแม้ว่าจะใช้งานได้จริง มีวิธีที่ดีกว่าในการทำเช่นนี้? ฉันใช้ SQLServer 2008 R2 และสคริปต์ฐานข้อมูลของฉันถูกเก็บไว้ในโครงการฐานข้อมูล VS 2008 เพื่อความกระจ่างแจ้งฉันไม่ได้ขอแนะนำให้ใช้วิธีทดสอบรหัสนี้เพียงอย่างเดียว เหมือนกับใน c # คุณตรวจพบข้อผิดพลาดทางไวยากรณ์ทันทีในไฟล์ที่ขึ้นต่อกันอื่น ๆ ในขณะที่คุณโค้ด (และจากนั้นใช้กลยุทธ์อื่น ๆ เพื่อทดสอบเช่นการทดสอบหน่วยซึ่งมักจะมีขนาดของคำสั่งช้าลง) ข้อผิดพลาดในไม่กี่วินาทีแทนที่จะต้องทำการทดสอบการทำงานเต็มรูปแบบซึ่งโดยทั่วไปอาจใช้เวลาสองสามชั่วโมงกว่าจะเสร็จสมบูรณ์

3
การจัดเก็บวันที่เป็นจำนวนเต็ม (ตัวเลข) ข้อดีคืออะไร
คำถามที่ 1 ฉันกำลังทำงานกับระบบที่เก็บวันที่เป็นจำนวนเต็ม (ตัวเลขจริง (8,0)) และฉันสังเกตเห็นว่าระบบอื่น ๆ เก็บวันที่เป็น int เช่นซิสโก้ในหัวข้อนี้ ตัวอย่าง 20120101 -- 01 Jan 2012 มีข้อได้เปรียบอะไรบ้างในการรักษาระบบวันที่เป็นตัวเลขและไม่ได้ใช้ SQL Datetime? คำถามที่ 2 ตอนนี้ฉันพยายามวนวันที่เป็นตัวเลขเพื่อค้นหาลูกค้าระหว่างสองวัน หากstartและenddateรวมสองเดือนฉันจะได้รับบันทึกนับพันแทนที่จะเป็นเพียง 60 ตัวอย่าง: create table #temp1(day int,capacity int) /* just a temp table */ declare @start int declare @end int set @start=20111201 set @end = 20120131 while (@start …

1
มุมมองการเข้าถึงตามตารางในฐานข้อมูลอื่นที่ไม่มีบัญชีในฐานข้อมูลอื่นนั้น
ฉันสร้างมุมมองในฐานข้อมูล 1 ตามตารางในฐานข้อมูล 2 ฉันให้SELECTสิทธิ์แก่ผู้ใช้ที่เข้าถึงได้เฉพาะฐานข้อมูล 1 ผู้ใช้ไม่สามารถรับมุมมองนี้ให้ทำงานได้เนื่องจากเขาไม่มีบัญชีในฐานข้อมูล 2 ฉันจะแก้ปัญหานี้ได้อย่างไร ฉันไม่ต้องการสร้างบัญชีในฐานข้อมูล 2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.