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

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


1
วิธีการบังคับให้วางฐานข้อมูลใน SQL Server 2008
ฉันพยายามบังคับให้วางฐานข้อมูล แต่หลังจากวางฐานข้อมูลเมื่อฉันพยายามสร้างฐานข้อมูลขึ้นใหม่ฉันได้รับข้อผิดพลาด ไม่สามารถสร้างไฟล์ C: \ Program ไฟล์ ..... [databasename] .mdf เนื่องจากมีอยู่แล้ว นี่คือแบบสอบถามของฉันเพื่อบังคับให้วางฐานข้อมูล Use master; ALTER database [databasename] set offline with ROLLBACK IMMEDIATE; DROP database [databasename]; ฉันเข้าใจว่าข้อความค้นหาด้านบนกำลังวางฐานข้อมูล แต่ไม่ได้ลบ.ldfและ.mdfไฟล์ วิธีการลบฐานข้อมูลอย่างละเอียด? แบบสอบถามปกติ Drop database [databasename] ; //deletes the database completely, including the ldf and mdf's. จะบังคับให้วางฐานข้อมูลซึ่งลบ.mdfและ.ldfไฟล์ได้อย่างไร?

4
วิธีการระบุแบบสอบถามที่เติมบันทึกธุรกรรม tempdb?
ฉันต้องการทราบวิธีการระบุแบบสอบถามที่ถูกต้องหรือเก็บ proc ซึ่งจริง ๆ แล้วกรอกบันทึกการทำธุรกรรมของฐานข้อมูล TEMPDB

7
การเขียนโครงสร้างธนาคารอย่างง่าย: ฉันจะรักษายอดคงเหลือของฉันให้สอดคล้องกับประวัติการทำธุรกรรมได้อย่างไร
ฉันกำลังเขียนคีสำหรับฐานข้อมูลธนาคารที่เรียบง่าย นี่คือคุณสมบัติพื้นฐาน: ฐานข้อมูลจะเก็บธุรกรรมกับผู้ใช้และสกุลเงิน ผู้ใช้ทุกคนมียอดดุลหนึ่งรายการต่อหนึ่งสกุลเงินดังนั้นแต่ละยอดดุลเป็นเพียงผลรวมของธุรกรรมทั้งหมดต่อผู้ใช้และสกุลเงิน ยอดคงเหลือต้องไม่ติดลบ แอปพลิเคชันธนาคารจะสื่อสารกับฐานข้อมูลผ่านขั้นตอนการจัดเก็บ ฉันคาดหวังว่าฐานข้อมูลนี้จะยอมรับการทำธุรกรรมใหม่หลายแสนรายการต่อวันรวมทั้งคำสั่งยอดคงเหลือในลำดับความสำคัญที่สูงขึ้น ในการให้บริการยอดคงเหลืออย่างรวดเร็วฉันต้องรวมไว้ล่วงหน้า ในเวลาเดียวกันฉันต้องรับประกันว่ายอดเงินจะไม่ขัดแย้งกับประวัติการทำธุรกรรม ตัวเลือกของฉันคือ: มีbalancesตารางแยกต่างหากและทำสิ่งใดสิ่งหนึ่งต่อไปนี้: ใช้ธุรกรรมกับทั้งtransactionsและbalancesตาราง ใช้TRANSACTIONตรรกะในเลเยอร์ของโพรซีเดอร์ที่เก็บไว้เพื่อให้แน่ใจว่ายอดคงเหลือและการทำธุรกรรมมีการซิงค์อยู่เสมอ (รองรับโดยแจ็ค ) ใช้ธุรกรรมกับtransactionsตารางและมีทริกเกอร์ที่อัปเดตbalancesตารางให้ฉันด้วยจำนวนธุรกรรม ใช้ธุรกรรมกับbalancesตารางและมีทริกเกอร์ที่เพิ่มรายการใหม่ในtransactionsตารางให้ฉันด้วยจำนวนธุรกรรม ฉันต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงใด ๆ นอกกระบวนการที่เก็บไว้ มิฉะนั้นตัวอย่างเช่นกระบวนการบางอย่างสามารถแทรกธุรกรรมลงในtransactionsตารางโดยตรงและภายใต้โครงการ1.3ยอดคงเหลือที่เกี่ยวข้องจะไม่ซิงค์กัน มีbalancesมุมมองที่จัดทำดัชนีที่รวมการทำธุรกรรมอย่างเหมาะสม เครื่องมือเก็บข้อมูลรับประกันยอดคงเหลือเพื่อให้สอดคล้องกับการทำธุรกรรมของพวกเขาดังนั้นฉันไม่จำเป็นต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อรับประกันสิ่งนี้ ในทางกลับกันฉันไม่สามารถบังคับยอดคงเหลือให้เป็นค่าที่ไม่เป็นลบได้อีกต่อไปนับตั้งแต่การดู - แม้แต่การดูที่มีการจัดทำดัชนี - ไม่สามารถมีCHECKข้อ จำกัด ได้ (สนับสนุนโดยDenny ) มีเพียงtransactionsตารางแต่มีคอลัมน์เพิ่มเติมเพื่อจัดเก็บยอดคงเหลือที่มีประสิทธิภาพหลังจากทำรายการนั้นแล้ว ดังนั้นบันทึกธุรกรรมล่าสุดสำหรับผู้ใช้และสกุลเงินจึงมียอดดุลปัจจุบัน (แนะนำโดยAndrewด้านล่าง; ตัวแปรที่เสนอโดยgarik ) ครั้งแรกที่ผมจัดการปัญหานี้ผมอ่านเหล่านี้ สอง2การอภิปรายและการตัดสินใจในตัวเลือก สำหรับการอ้างอิงคุณสามารถดูการดำเนินงานที่เปลือยกระดูกของมันนี่ คุณออกแบบหรือจัดการฐานข้อมูลเช่นนี้ด้วยโปรไฟล์การโหลดสูงหรือไม่ คุณมีวิธีแก้ไขปัญหานี้อย่างไร คุณคิดว่าฉันได้เลือกการออกแบบที่ถูกต้องหรือไม่? มีอะไรบ้างที่ฉันควรจำไว้? ตัวอย่างเช่นฉันรู้ว่าการเปลี่ยนสคีมาในtransactionsตารางจะต้องมีการสร้างbalancesมุมมองใหม่ แม้ว่าฉันจะเก็บถาวรธุรกรรมเพื่อทำให้ฐานข้อมูลมีขนาดเล็ก (เช่นย้ายไปที่อื่นและแทนที่ด้วยธุรกรรมสรุป) การสร้างมุมมองใหม่จากการทำธุรกรรมหลายสิบล้านครั้งด้วยการปรับปรุง schema ทุกครั้งอาจหมายถึงการหยุดทำงานต่อการปรับใช้ …

6
อะไรคือสาเหตุหลักของการหยุดชะงักและสามารถป้องกันได้?
เมื่อเร็ว ๆ นี้หนึ่งในแอปพลิเคชัน ASP.NET ของเราแสดงข้อผิดพลาดการหยุดชะงักของฐานข้อมูลและฉันถูกขอให้ตรวจสอบและแก้ไขข้อผิดพลาด ฉันจัดการเพื่อค้นหาสาเหตุของการหยุดชะงักเป็นขั้นตอนการจัดเก็บที่ปรับปรุงตารางภายในเคอร์เซอร์อย่างจริงจัง นี่เป็นครั้งแรกที่ฉันเห็นข้อผิดพลาดนี้และไม่รู้วิธีการติดตามและแก้ไขอย่างมีประสิทธิภาพ ฉันลองทุกวิธีที่เป็นไปได้ที่ฉันรู้และในที่สุดก็พบว่าตารางที่กำลังอัปเดตไม่มีคีย์หลัก! โชคดีที่มันเป็นคอลัมน์ตัวตน ฉันภายหลังพบนักพัฒนาที่เขียนสคริปต์ฐานข้อมูลสำหรับการปรับใช้ที่สับสน ฉันเพิ่มคีย์หลักและปัญหาได้รับการแก้ไข ฉันรู้สึกมีความสุขและกลับมาที่โครงการของฉันและทำการวิจัยเพื่อค้นหาสาเหตุของการหยุดชะงัก ... เห็นได้ชัดว่ามันเป็นเงื่อนไขการรอแบบวงกลมที่ทำให้เกิดการหยุดชะงัก การอัพเดตใช้เวลานานกว่าโดยไม่มีคีย์หลักมากกว่ากับคีย์หลัก ฉันรู้ว่ามันไม่ใช่ข้อสรุปที่ชัดเจนนั่นคือเหตุผลที่ฉันโพสต์ที่นี่ ... คีย์หลักที่หายไปเป็นปัญหาหรือไม่ มีเงื่อนไขอื่นใดที่ทำให้เกิดการหยุดชะงักอื่นนอกเหนือจาก (การกีดกันซึ่งกันและกันถือและรอไม่มีการจองล่วงหน้าและการรอแบบวงกลม)? ฉันจะป้องกันและติดตามการหยุดชะงักได้อย่างไร

11
ผ่านพารามิเตอร์อาร์เรย์ไปยังกระบวนงานที่เก็บไว้
ฉันมีกระบวนการที่คว้าบันทึกจำนวนมาก (1,000 รายการ) และดำเนินการกับพวกเขาและเมื่อฉันทำเสร็จแล้วฉันต้องทำเครื่องหมายเป็นจำนวนมากว่าผ่านการประมวลผล ฉันสามารถระบุสิ่งนี้กับรายการรหัสขนาดใหญ่ ฉันกำลังพยายามหลีกเลี่ยงรูปแบบ "การอัพเดทในวง" ดังนั้นฉันจึงต้องการหาวิธีที่มีประสิทธิภาพมากขึ้นในการส่งถุง ID นี้ไปยัง MS SQL Server 2008 ที่เก็บไว้ proc ข้อเสนอ # 1 - พารามิเตอร์ที่มีมูลค่าของตาราง ฉันสามารถกำหนดประเภทตารางที่มีเพียง ID ฟิลด์และส่งตารางที่เต็มไปด้วย ID เพื่ออัปเดต ข้อเสนอ # 2 - พารามิเตอร์ XML (varchar) พร้อม OPENXML () ในเนื้อหาของ proc ข้อเสนอ # 3 - การแยกวิเคราะห์รายการ ฉันควรหลีกเลี่ยงสิ่งนี้ถ้าเป็นไปได้เพราะดูเหมือนว่าจะเทอะทะและผิดพลาดได้ง่าย การตั้งค่าใด ๆ ในหมู่เหล่านี้หรือความคิดใด ๆ ที่ฉันพลาดไป?

4
อะไรคือเหตุผลทางธุรกิจวัตถุประสงค์ในการใช้ SQL Server 2012 มากกว่า 2008 R2
บริษัท ของฉันกำลังเผชิญกับการตัดสินใจว่าจะซื้อ SQL Server 2012 Denali หรือ SQL Server 2008 R2 สำหรับเซิร์ฟเวอร์ฐานข้อมูลใหม่ ฉันกำลังมองหาเหตุผลวัตถุประสงค์เพื่อเลือกอย่างใดอย่างหนึ่ง ความต้องการของเรา: Standard edition (สำหรับเหตุผลด้านการเงินและการขาดคุณสมบัติองค์กร) ภาระงาน OLTP (ซึ่งหมายความว่าเราไม่ต้องการฟังก์ชั่นการสร้างหน้าต่างใหม่และดัชนีที่จัดเก็บคอลัมน์) ขนาดฐานข้อมูล 10-100 GB ไม่จำเป็นต้องมีคุณสมบัติระบบธุรกิจอัจฉริยะ ต้องการเอ็นจินเชิงสัมพันธ์เท่านั้น การมิร์เรอร์ฐานข้อมูลแบบซิงโครนัส ปัจจุบันเหตุผลต่อไปนี้เป็นที่รู้จักกันสำหรับฉัน: SQL Server 2012 Denali รุ่นใหม่ล่าสุดที่มีอยู่ SQL Server 2008 R2 เทคโนโลยีที่พิสูจน์แล้ว ฉันไม่สามารถหาเหตุผลทางเทคนิคได้มากมายที่จะชอบอีกเหตุผลหนึ่ง โดยพื้นฐานแล้วจะมีการเลือกใช้เทคโนโลยีที่ได้รับการพิสูจน์แล้วว่าทำงานได้สำเร็จเทียบกับรุ่นใหม่ล่าสุดและยิ่งใหญ่ที่สุดที่มีให้ เหตุผลวัตถุประสงค์ในการตัดสินใจมีอะไรบ้าง

3
ฉันจะเรียกคืนระเบียนที่ถูกลบได้อย่างไร
ฉันลบประมาณ 2,000,000 ระเบียนจากตาราง SQL Server 2008 ระยะไกลโดยไม่ตั้งใจ เซิร์ฟเวอร์ไม่อนุญาตให้ฉันเข้าถึงไฟล์สำรองข้อมูลทางฝั่งเซิร์ฟเวอร์ มีวิธีใดที่จะเรียกคืนบันทึกเหล่านี้หรือไม่

8
ฉันจะลดขนาดไฟล์ทั้งหมดอย่างรวดเร็วสำหรับฐานข้อมูลทั้งหมดได้อย่างไร
ใน SQL Server (2008 ในกรณีนี้) ฉันจะย่อขนาดไฟล์ทั้งหมดอย่างรวดเร็วทั้งบันทึกและข้อมูลสำหรับฐานข้อมูลทั้งหมดในอินสแตนซ์ได้อย่างไร ฉันสามารถผ่าน SSMS และคลิกขวาแต่ละครั้งและเลือกงาน -> ลดขนาด แต่ฉันกำลังมองหาบางสิ่งที่เร็วขึ้น ฉันสคริปต์สคริปต์ "สร้างฐานข้อมูล" บางส่วนและลืมว่าพวกเขามีขนาดบอลลูนเป็นค่าเริ่มต้นและไม่ต้องการพื้นที่ที่สงวนไว้สำหรับไฟล์เหล่านี้ในโครงการนี้ค่อนข้างมาก

2
วัตถุประสงค์ของฐานข้อมูล 'เจ้าของ' คืออะไร?
วันนี้ในขณะที่การแก้ไขปัญหานายหน้าบริการฉันค้นพบว่าเจ้าของฐานข้อมูลคือการเข้าสู่ระบบ Windows ของพนักงานที่ออกจาก บริษัท การเข้าสู่ระบบของเขาถูกลบและทำให้การแจ้งเตือนการค้นหาล้มเหลว แนวทางปฏิบัติที่ดีที่สุดในการจัดการกับสิ่งนี้คือการทำให้เจ้าของฐานข้อมูลเป็น เราเปลี่ยนและลบล้างคิว คำถาม (ระดับประถมศึกษา) ของฉัน: เจ้าของฐานข้อมูลคืออะไรและวัตถุประสงค์ของมันคืออะไร

5
ฉันไม่สามารถเชื่อมต่อกับฐานข้อมูล SQL เซิร์ฟเวอร์ของฉันผ่านที่อยู่ IP
ฉันติดตั้งเซิร์ฟเวอร์ที่รัน Windows Server 2008 และติดตั้ง SQL Server 2008 Express แล้ว ฉันสามารถเชื่อมต่อกับฐานข้อมูล SQL Server Express MACHINENAME/SQLEXPRESSของเครื่องผ่านทาง อย่างไรก็ตามเมื่อเราเชื่อมต่อผ่านซอฟต์แวร์หรือสคริปต์โดยใช้ที่อยู่ IPจะไม่อนุญาตการเชื่อมต่อ ฉันเหนื่อย: ปิดไฟร์วอลล์ อนุญาตการเชื่อมต่อระยะไกลสำหรับฐานข้อมูล SQL การเปิดใช้งาน TCP / IP ภายในการกำหนดค่า SQL เมื่อเราพยายามเชื่อมต่อผ่านซอฟต์แวร์ 'SQL Server Management Studio' เราจะได้รับข้อความต่อไปนี้: ข้อความผิดพลาด: เกิดข้อผิดพลาดขณะสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ เมื่อเชื่อมต่อกับ SQL Server 2005 ความล้มเหลวนี้อาจเกิดจากข้อเท็จจริงที่ว่าภายใต้การตั้งค่าเริ่มต้น SQL Server ไม่อนุญาตการเชื่อมต่อระยะไกล (ผู้ให้บริการ: ผู้ให้บริการ TCP ข้อผิดพลาด: 0 - ไม่สามารถทำการเชื่อมต่อได้เนื่องจากเครื่องเป้าหมายปฏิเสธอย่างแข็งขัน) …


3
พารามิเตอร์การดมกลิ่นเทียบกับตัวแปรเทียบกับการคอมไพล์ vs ออปติไมซ์สำหรับ UNKNOWN
ดังนั้นเราจึงใช้เวลานาน proc ทำให้เกิดปัญหาเมื่อเช้านี้ (30 วินาที + เวลาทำงาน) เราตัดสินใจตรวจสอบเพื่อดูว่าการดมพารามิเตอร์เป็นการตำหนิหรือไม่ ดังนั้นเราเขียน proc ใหม่และตั้งค่าพารามิเตอร์ขาเข้าเป็นตัวแปรเพื่อกำจัดพารามิเตอร์การดมกลิ่น วิธีการทดลอง / จริง แบมปรับปรุงเวลาแบบสอบถาม (น้อยกว่า 1 วินาที) เมื่อดูที่แผนแบบสอบถามการปรับปรุงจะพบในดัชนีที่ไม่ได้ใช้ เพียงเพื่อยืนยันว่าเราไม่ได้รับผลบวกผิดพลาดเราได้ dbcc freeproccache ใน proc และรันซ้ำเพื่อดูว่าผลลัพธ์ที่ได้รับการปรับปรุงจะเหมือนเดิมหรือไม่ แต่เพื่อความประหลาดใจของเรา proc ดั้งเดิมยังคงทำงานช้า เราลองอีกครั้งด้วย WITH RECOMPILE ยังคงช้า (เราลองคอมไพล์อีกครั้งในการโทรไปยัง proc และภายใน proc itelf) เรายังรีสตาร์ทเซิร์ฟเวอร์ (เห็นได้ชัดว่ากล่อง dev) ดังนั้นคำถามของฉันคือสิ่งนี้ ... พารามิเตอร์การดมกลิ่นสามารถตำหนิได้อย่างไรเมื่อเราได้รับแบบสอบถามช้าแบบเดียวกันกับแคชแผนว่างเปล่า ... ไม่ควรมีพารามิเตอร์ใด ๆ ในการดมกลิ่น ??? เรากำลังได้รับผลกระทบจากสถิติตารางที่ไม่เกี่ยวข้องกับแคชแผนหรือไม่ และถ้าเป็นเช่นนั้นทำไมการตั้งค่าพารามิเตอร์ขาเข้าเป็นตัวแปรช่วยได้อย่างไร …

4
ฉันจะกำหนดการเข้าถึงความปลอดภัยของกลุ่ม Active Directory ทั้งหมดใน SQL Server 2008 ได้อย่างไร
ฉันต้องการใช้การรักษาความปลอดภัยแบบรวมกับแอปพลิเคชันภายในซึ่งอยู่ในโดเมนทั้งหมด น่าเสียดายที่ฉันไม่สามารถทำให้สิ่งนี้ทำงานได้ดี ฉันต้องการกำหนดให้ทั้ง Exchange (Active Directory) จัดกลุ่มบทบาทใน SQL Server สำหรับการเข้าถึงแบบอ่าน / เขียนในตารางบางตัว ด้วยวิธีนี้ฉันจะไม่ต้องสร้างโอเปอเรเตอร์เมื่อมีคนจ้างหรือลบโอเปอเรเตอร์เมื่อมีคนถูกไล่ออก เป็นไปได้ไหม ฉันจะทำขั้นตอนใดในการทำเช่นนี้?

3
เพราะเหตุใดฐานข้อมูลของฉันยังคงกระจัดกระจายหลังจากฉันสร้างและทำดัชนีใหม่ทุกอย่างแล้ว
ฉันมีฐานข้อมูลที่ฉันพยายามจัดระเบียบตารางทั้งหมดในครั้งเดียวโดยใช้ T-SQL นี้: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables จากนั้นคัดลอกและวางผลลัพธ์ไปยังหน้าต่างแบบสอบถามใหม่และเรียกใช้สิ่งนั้น ฉันไม่มีข้อผิดพลาด แต่ฉันยังมีการแยกส่วน ฉันพยายามเรียกใช้ทั้งสองคำสั่งแยกกันด้วยและยังมีการแยกส่วน หมายเหตุ:ฉันทราบว่าREORGANIZEไม่จำเป็นโดย Aaron และฉันรู้ว่าฉันสามารถใช้ไดนามิก sql เพื่อทำสิ่งนี้โดยอัตโนมัติ ฉันรันสิ่งนี้เพื่อพิจารณาว่าฉันยังมีการแยกส่วน: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE …

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