ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
ความแตกต่างระหว่าง EXECUTE AS USER และ EXECUTE AS LOGIN ที่ทำให้อันที่สองทำงานโดยไม่คาดหมายคืออะไร
เมื่อเร็ว ๆ นี้ฉันใช้ EXECUTE AS LOGIN เพื่อตรวจสอบว่าบางคนสามารถหรือไม่สามารถใช้ฟังก์ชันตารางในฐานข้อมูลของเรา การทดสอบแสดงให้เห็นว่าเขาทำได้ แต่เขารายงานความล้มเหลวซ้ำ ๆ บุคคลนั้นใช้ชื่อเข้าสู่ระบบ 'WEB' เพื่อเชื่อมต่อกับฐานข้อมูลและมีผู้ใช้ 'เว็บ' ในฐานข้อมูลที่เกี่ยวข้องกับชื่อเข้าสู่ระบบ 'เว็บ' ดังนั้นฉันจึงลองใช้สคริปต์ต่อไปนี้: -- part 1 EXECUTE AS USER = 'WEB' GO SELECT USER_NAME() AS 'user_name' ,SUSER_NAME() AS 'suser_name' ,SUSER_SNAME() AS 'suser_sname' ,SYSTEM_USER AS 'system_user' GO REVERT GO และ -- part 2 EXECUTE AS LOGIN = …

3
ข้อ จำกัด อย่างหนักสำหรับการรวมบทความการจำลองแบบนับรวมกันไหม
พื้นหลังเล็กน้อย เราพัฒนาแอพที่ใช้การจำลองแบบผสาน ขณะนี้เรากำลังเผยแพร่บทความประมาณ 212 บทความและทุกอย่างเรียบร้อยดีเนื่องจากดูเหมือนว่าจะอยู่ในขอบเขตการ จำกัด จำนวนบทความที่ 256 (การใช้ SQL Standard 2005 ที่เซิร์ฟเวอร์และ 2005 Express ที่ระดับสมาชิก) เราอยู่ในขั้นตอนการพัฒนาเวอร์ชั่นใหม่โดยมีฐานข้อมูลใหม่ที่สร้างขึ้นจากพื้นฐานซึ่งจะมีความต้องการระบบขั้นต่ำของฝั่งเซิร์ฟเวอร์ SQL 2008 R2 Standard และ Express 2008 R2 ที่ปลายไคลเอนต์ซึ่งดูเหมือนว่าจะมี จำกัด การนับ 256 เดียวกันสำหรับบทความที่เผยแพร่ (ใช่เราจะสนับสนุนปี 2012 ด้วยเช่นกัน) คำถามมาในที่เราได้ทดสอบเผยแพร่บทความมากกว่า 400 รายการในเวอร์ชันใหม่และการทดสอบทุกอย่างใช้งานได้ (การสร้างผับการสร้างสแนปชอตและการสมัครสมาชิกและการจำลองแบบเอง) มีใครเกินขีด จำกัด การนับก่อนหน้านี้หรือไม่และนี่เป็นเพียงข้อ จำกัด ที่แนะนำอย่างนุ่มนวลหรือไม่ เราไม่เห็นข้อผิดพลาดใด ๆ ทั้งในระหว่างการสร้างสิ่งพิมพ์หรือการสร้างสมาชิก ตามบทความนี้: http://msdn.microsoft.com/en-us/library/ms143432%28v=sql.105%29 ฉันรอการโทรกลับจาก Microsoft แต่ฉันต้องการทราบว่ามีใครเห็นสิ่งนี้มาก่อนใน …

7
การจัดทำดัชนี MySQL VarChar
ฉันกำลังพยายามจัดทำดัชนีblogentriesฐานข้อมูลของฉันเพื่อประสิทธิภาพที่ดีขึ้น แต่พบปัญหา นี่คือโครงสร้าง: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; แบบสอบถามแบบนี้ใช้ดัชนีอย่างถูกต้อง: EXPLAIN SELECT id_id,title_id FROM blogentries …
10 mysql  varchar 

1
การเริ่มต้นการจำลองแบบของทรานแซคชันจากการสำรองข้อมูล
มีตัวเลือกเมื่อตั้งค่าสิ่งพิมพ์สำหรับการจำลองแบบเพื่ออนุญาตให้เริ่มต้นจากการสำรองข้อมูล เราได้สร้างฐานข้อมูลที่จำลองแบบมาหลายปีแล้วและได้เริ่มต้นจาก backkup เสมอ แต่ไม่เคยตั้งค่าสถานะนี้ (เราเพิ่งสังเกตเห็นมันเป็นครั้งแรกเมื่อสองสามวันก่อน) การจำลองแบบได้ทำงานโดยไม่มีปัญหาตลอดเวลานี้อย่างแน่นอน ฉันพบว่ามีเพลงฮิตมากมายที่อธิบายว่าต้องใช้สิ่งนี้ แต่ไม่มีใครอธิบายได้ว่าทำไม ใครบ้างมีความเข้าใจในสิ่งที่จริงนี้ไม่? จากความได้เปรียบของฉันดูเหมือนจะไม่จำเป็น แต่ฉันคิดว่าฉันต้องพลาดบางสิ่งบางอย่าง

1
แบบสอบถาม MDX สำหรับ RANK โดยไม่คำนึงถึงลำดับชั้น
ฉันหวังที่จะเพิ่มการคำนวณเพื่อ SSAS Cube ของฉัน (SSAS 2012) ที่จะแสดงตำแหน่งของญาติของสิ่งที่สมาชิกปัจจุบันกับสมาชิกคนอื่น ๆ ในปลากะรังที่โดยไม่ต้องระบุกะรังล่วงหน้า ตัวอย่างเช่นสมมติว่าฉันมีการคำนวณแล้วEfficiencyซึ่งถูกกำหนดเป็น $$ / ชั่วโมง ฉันต้องการเพิ่มการEfficiency Rankคำนวณเช่นกันซึ่งจะบอกตำแหน่งที่สัมพันธ์กับสมาชิกปัจจุบันที่มีอยู่ในชุด ไวยากรณ์ที่ฉันพยายามคือ RANK([Measures].[Efficiency].CurrentMember, [Measures].[Efficiency]) ซึ่งฉันรู้ว่าไม่ถูกต้อง ฉันไม่สามารถหาคำแนะนำเกี่ยวกับเรื่องนี้ได้จากทุกที่ดังนั้นฉันหวังว่าจะมีแนวปฏิบัติหรือรูปแบบที่ดีที่สุดสำหรับเรื่องนี้เนื่องจากดูเหมือนว่ามันจะเป็นข้อกำหนดทางธุรกิจ

1
วิธีสร้างทริกเกอร์ที่อัปเดตฟิลด์วันที่และฟิลด์เวลาเมื่อแก้ไขแถว
ฉันสร้างตารางtesttableภายในฐานข้อมูลtestbaseที่มีโครงสร้างต่อไปนี้: product_no (int, not null) product_name (varchar(30), not null) price (money, null) expire_date (date, null) expire_time (time(7), null) อย่างไรก็ตามฉันจะเขียนทริกเกอร์อย่างไรเพื่อให้อัปเดตแถวเฉพาะที่มีการแก้ไข (หรืออัปเดตด้วยข้อมูลใหม่) และบันทึกวันที่แก้ไขลงในexpire_dateฟิลด์และเวลาแก้ไขในexpire_timeฟิลด์ (หรือถ้าเป็นไปได้?)

4
วิธีหยุดสคริปต์ psql แบบมีเงื่อนไข (ขึ้นอยู่กับค่าตัวแปร)
ลองพิจารณาตัวอย่างต่อไปนี้ (ตั้งแต่เริ่มต้นของสคริปต์ psql): \c :db_to_run_on TRUNCATE the_most_important_table; -- tried to avoid similarities to anything that exists out there ตอนนี้ถ้ามันถูกเรียกใช้โดยคำสั่ง psql [connection details] -v db_to_run_on=\'dev_database\' จากนั้นมันจะทำงานและผู้ใช้มีความสุข แต่สิ่งที่ถ้า (s) เขาตัดสินใจที่จะระบุ-v db_to_run_on=production_database? (สมมติว่าสิ่งนี้สามารถเกิดขึ้นได้เช่นเดียวกับที่ผู้คนเรียกใช้rm -rf / # don't try this at home!!!บางครั้ง) หวังว่าจะมีการสำรองข้อมูลใหม่ของตารางนั้น ... ดังนั้นคำถามที่เกิดขึ้น: วิธีการตรวจสอบตัวแปรที่ส่งผ่านไปยังสคริปต์และหยุดการประมวลผลเพิ่มเติมตามค่าของพวกเขา
10 postgresql  psql 

1
การแบ่งพาร์ติชัน MySQL: มีการแลกเปลี่ยนประสิทธิภาพระหว่างจำนวนพาร์ติชันและขนาดของแต่ละพาร์ติชันหรือไม่?
ฉันมีตารางขนาดใหญ่ (หลายร้อยล้านแถว) ที่ฉันต้องการแบ่งพาร์ติชันอย่างมีประสิทธิภาพ คำถามของฉันคือว่ามีการแลกเปลี่ยนระหว่างขนาดพาร์ติชันและจำนวนพาร์ติชัน เท่าที่ฉันเข้าใจแบบสอบถามส่วนใหญ่ในคอลัมน์ที่ใช้ในพาร์ติชันจะเร็วขึ้นเนื่องจากแบบสอบถามจะ (สำหรับการค้นหาส่วนใหญ่) เท่านั้นที่จะต้องค้นหาภายในพาร์ติชันที่ใช้กับแบบสอบถาม ดังนั้นมันจะทำให้รู้สึกว่าในการเพิ่มประสิทธิภาพสูงสุดคุณควรแบ่งตารางใหญ่เป็นจำนวนพาร์ติชันสูงสุดทำให้แต่ละพาร์ติชันมีขนาดเล็กที่สุด ในกรณีของ MySQL หมายถึง 1024 พาร์ติชัน แต่มีข้อเสียเปรียบด้านประสิทธิภาพใด ๆ ที่มีพาร์ติชั่นจำนวนมาก? เป็นเช่นนั้นเราจะหาจำนวนพาร์ติชั่นที่เหมาะสมได้อย่างไร? หมายเหตุ: มีคำถามที่ค่อนข้างคล้ายกันเกี่ยวกับ stackoverflow อยู่แล้วแต่มีเพียงหนึ่งคำตอบซึ่ง (จากมุมมองของฉัน) คิดถึงเครื่องหมาย ดังนั้นฉันจะระบุคำถามในแบบของฉันเอง ... หวังว่ามันจะชัดเจนยิ่งขึ้น

3
ฉันจะมั่นใจได้อย่างไรว่ามีเพียงหนึ่งกระบวนการที่ทำงานอยู่ใน Oracle
เราจำเป็นต้องตรวจสอบให้แน่ใจว่ามีเพียงหนึ่งสำเนาของกระบวนการเฉพาะที่ทำงานใน Oracle ถ้ามันกำลังทำงานอยู่และผู้ใช้พยายามที่จะเปิดอีกมันก็ควรผิดพลาด วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?

1
Mongo ไม่พบคอลเล็กชันของฉัน
เซิร์ฟเวอร์ mongodb ของฉันมีฐานข้อมูลชื่อ villageContents มันมีคอลเลกชันชื่อ tablebusiness ถ้าฉันวิ่ง mongo ฉันเห็น MongoDB shell version: 2.0.7 connecting to: test > ฉันสงสัยว่า "การทดสอบ" คืออะไร ไม่มีฐานข้อมูลชื่อทดสอบอยู่ที่นั่น ฉันพยายามที่จะรัน > villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"}) Wed Aug 15 09:28:28 ReferenceError:is not defined (shell):1 > ฉันพยายามที่จะรัน > test.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"}) Wed Aug 15 09:29:13 ReferenceError: test is not defined (shell):1 …
10 mongodb 

4
วิธีตรวจสอบว่าแบบสอบถามย่อยมีผลลัพธ์ที่แตกต่างกันหนึ่งรายการอย่างแน่นอนหรือไม่และค่าที่ระบุไว้รัดกุม?
ฉันพบว่าตัวเองเขียนข้อความต่อไปนี้: select 'yes' where exists(select * from foo where val=1) and not exists(select * from foo where val<>1); และสงสัยว่ามีวิธีรัดกุมมากกว่านี้หรือไม่โดยไม่ต้องเสียสละความสามารถในการอ่านมากเกินไป ฉันพบวิธีหนึ่งที่ฉันโพสต์เป็นคำตอบ แต่ฉันไม่พอใจกับมันโดยสิ้นเชิงและจะสนใจทางเลือกอื่น ๆ ในกรณีนี้valจะไม่ซ้ำกันภายในfoo- ไม่มีการซ้ำซ้อน

2
ข้อผิดพลาดในการสำรองข้อมูล Microsoft SQL Server 2008 R2
ฉันพยายามสำรองข้อมูลอย่างง่ายไปยังดิสก์ภายนอกและรับข้อผิดพลาดนี้: การสำรองข้อมูลล้มเหลวสำหรับเซิร์ฟเวอร์ 'ชื่อเซิร์ฟเวอร์' ข้อมูลเพิ่มเติม: System.Data.SqlClient.SqlError: สื่อที่โหลดบน "C: \ Program Files \ Microsoft SQL .. " ได้รับการจัดรูปแบบเพื่อรองรับ 1 ครอบครัวสื่อ แต่คาดว่าจะมี 2 ครอบครัวสื่อตามข้อมูลจำเพาะของอุปกรณ์สำรอง (Microsoft.SqlServer.Smo) ` ประเภทการสำรองข้อมูล: เต็ม เหตุใดฉันจึงได้รับข้อผิดพลาดนี้และเหตุใดจึงมีข้อความชี้ไปที่C:\Program Files..ว่าไฟล์ปลายทางเป็นอุปกรณ์ภายนอกหรือไม่

3
มีวิธีทดสอบว่า DELETE จะล้มเหลวเนื่องจากข้อ จำกัด หรือไม่
ฉันต้องการที่จะคาดการณ์ว่าจะมีการลบ DELETE หรือไม่โดยไม่ทำการลบ ตัวเลือกของฉันสำหรับการทำสิ่งนี้มีอะไรบ้าง มีวิธีง่ายๆในการทำ "dry run" ของ DELETE หรือไม่?

4
ตรวจสอบว่า 2 ตาราง (บนเซิร์ฟเวอร์ที่แตกต่างกัน) มีข้อมูลที่แน่นอนเหมือนกัน
ดังนั้นดูเหมือนว่า บริษัท ที่โฮสต์ SQL Server ของเรามีปัญหากับการจำลองแบบจากเซิร์ฟเวอร์การผลิตไปยังเซิร์ฟเวอร์การสำรองข้อมูล ... ฉันเชื่อว่าบางส่วนของตารางได้ถูกจำลองอย่างถูกต้องแม้ว่า การจำลองแบบเสร็จสิ้นทุกวัน (หลังจากชั่วโมง) มีวิธีที่ฉันสามารถเปรียบเทียบ 2 ของตารางเดียวกัน 1 จากสำรอง vs 1 จากเซิร์ฟเวอร์การผลิตเพื่อดูว่าการจำลองแบบคืนที่ผ่านมาทำงานหรือไม่ วิธีเดียวที่ฉันสามารถค้นหาได้คือเรียกใช้แบบสอบถามต่อไปนี้บนเซิร์ฟเวอร์ทั้งสองและดูว่าผลลัพธ์ที่ตรงกับ "อาจ" หมายความว่าถึง 2 ตารางมีข้อมูลเดียวกันหรือไม่ SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM ( SELECT * FROM table_to_compare ) t1 ใช้รหัสข้างต้นดูเหมือนว่าตารางทำซ้ำได้สำเร็จเนื่องจากค่า checksum เหมือนกัน แต่ฉันไม่แน่ใจว่าวิธีนี้น่าเชื่อถือเพียงใด ไม่มีใครรู้วิธีที่ดีกว่าในการตรวจสอบนี้หรือถ้าเป็นวิธีที่ดี? ฉันใช้ SQL Server 2008 บนคอมพิวเตอร์ที่ใช้ Windows Server 2008 ขอบคุณ

2
ฉันจะตัดอักขระที่ไม่ใช่ตัวเลขออกจากสตริงได้อย่างไร
ผู้ใช้ป้อนคำค้นหาในกล่องและค่านั้นจะถูกส่งผ่านไปยังขั้นตอนการจัดเก็บและตรวจสอบกับเขตข้อมูลที่แตกต่างกันไม่กี่ในฐานข้อมูล ฟิลด์เหล่านี้ไม่ได้เป็นชนิดข้อมูลเดียวกันเสมอไป หนึ่งฟิลด์ (หมายเลขโทรศัพท์) ประกอบด้วยตัวเลขทั้งหมดดังนั้นเมื่อตรวจสอบจะตัดอักขระที่ไม่ใช่ตัวเลขทั้งหมดออกจากสตริงโดยใช้ฟังก์ชัน. Net CLR SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '') ปัญหาคือฟังก์ชั่นนี้หยุดทำงานทันทีที่มีข้อผิดพลาดดังต่อไปนี้: ข่าวสารเกี่ยวกับ 6533, ระดับ 16, สถานะ 49, บรรทัด 2 AppDomain MyDBName.dbo [runtime] .1575 ถูกยกเลิกการโหลดโดยนโยบายการเลื่อนระดับเพื่อให้แน่ใจว่า ความสอดคล้องของใบสมัครของคุณ หน่วยความจำไม่เพียงพอเกิดขึ้นขณะเข้าถึงทรัพยากรที่สำคัญ System.Threading.ThreadAbortException: ข้อยกเว้นชนิด 'System.Threading.ThreadAbortException' ถูกส่งไป System.Threading.ThreadAbortException: ฉันลองคำแนะนำที่โพสต์บนMSDNสำหรับข้อผิดพลาดนี้ แต่ฉันยังคงพบปัญหา ในขณะนี้การสลับไปใช้เซิร์ฟเวอร์ 64 บิตไม่ใช่ตัวเลือกสำหรับเรา ฉันรู้ว่าการรีสตาร์ทเซิร์ฟเวอร์จะปล่อยหน่วยความจำใด ๆ ก็ตาม แต่นั่นไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้ในสภาพแวดล้อมการใช้งานจริง มีวิธีการแยกอักขระที่ไม่ใช่ตัวเลขออกจากสตริงใน SQL Server 2005 โดยใช้ T-SQL เท่านั้นหรือไม่

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