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

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

4
ไม่สามารถจัดสรรหน้าใหม่สำหรับฐานข้อมูลเนื่องจากมีพื้นที่ดิสก์ไม่เพียงพอ
การใช้ตัวช่วยสร้างการนำเข้าและส่งออกเซิร์ฟเวอร์ SQL ฉันได้รับข้อผิดพลาดนี้: ข้อผิดพลาด 0xc0202009: งานการไหลของข้อมูล 1: รหัสข้อผิดพลาด SSIS DTS_E_OLEDBERROR มีข้อผิดพลาด OLE DB เกิดขึ้น รหัสข้อผิดพลาด: 0x80004005 ไม่สามารถจัดสรรหน้าใหม่สำหรับฐานข้อมูล 'ฐานข้อมูล' เนื่องจากพื้นที่ดิสก์ไม่เพียงพอในกลุ่มไฟล์ 'หลัก' สร้างพื้นที่ที่จำเป็นโดยการวางวัตถุในกลุ่มไฟล์เพิ่มไฟล์เพิ่มเติมไปยังกลุ่มไฟล์หรือการตั้งค่าอัตโนมัติในไฟล์ที่มีอยู่ในกลุ่มไฟล์ ฉันพยายามอัปโหลดไฟล์ขนาด 2GB และในขณะที่โหลดไฟล์ลำดับที่ 4 ฉันยังคงได้รับข้อความแสดงข้อผิดพลาดข้างต้นแม้หลังจากไปที่คุณสมบัติฐานข้อมูล> ไฟล์และเปลี่ยน autogrowth ของ Filegroup เป็น 2,500 MB และไม่ จำกัด ขนาดสูงสุด วิธีแก้ปัญหาที่ดีที่สุดคืออะไร ในที่สุดข้อมูลนี้จะใช้เวลาประมาณ 60-80GB
13 sql-server 

1
การตั้งค่าตัวแปรในโหมด SQLCMD
ใช้ SQL Server 2008 R2 Enterprise Edition พิจารณาข้อความต่อไปนี้: :setvar source_server_name "SERVERNAME\INSTANCENAME" เป็นไปได้ในโหมด SQLCMD เพื่อรับค่านั้นโดยใช้ TSQL สิ่งที่ต้องการ: :setvar source_server_name = SELECT @@servername ขอขอบคุณ อัพเดทเมื่อ 7/15/2013 คำตอบสองข้อเสนอด้านล่างไม่ได้ให้ผลลัพธ์ที่ต้องการดังนั้นฉันจึงเพิ่มตัวอย่างที่เกี่ยวข้อง :setvar source_server_name [myserver] ตัวแปร source_server_name ถูกตั้งค่าเป็นสตริงข้อความ [myserver_1] ฉันต้องการทำสิ่งนี้: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT …

4
แทรกจำนวนมากผ่านเครือข่าย
ใครสามารถช่วยฉันด้วยสิ่งเหล่านี้? BULK INSERT DATABESE01.dbo.TABLE01 FROM '\\COMPUTER01\FOLDER01\TextFile.txt' WITH ( FIELDTERMINATOR = ' ', rowterminator = '\n', tablock ) ข้อผิดพลาดแสดงไม่สามารถเปิดได้: ไม่สามารถแทรกจำนวนมากได้เนื่องจากไม่สามารถเปิดไฟล์ '\ SERVERNAME \ FOLDERNAME \ textFile.txt' รหัสข้อผิดพลาดของระบบปฏิบัติการ 5 (ปฏิเสธการเข้าถึง) พา ธ อยู่บนคอมพิวเตอร์เครื่องอื่นบนเครือข่าย

2
แกน CPU เพิ่มเติมเทียบกับดิสก์ที่เร็วกว่า
ฉันเป็นส่วนหนึ่งของ บริษัท ขนาดเล็กดังนั้นตามปกติจะครอบคลุมบทบาทที่แตกต่างกันจำนวนหนึ่ง ล่าสุดคือการจัดหากล่อง SQL Server เฉพาะสำหรับ. NET web app ของเรา เราได้รับการยกมาใน Dual Xeon E5-2620 (หกคอร์) การกำหนดค่าซีพียู 2.00 GHz (รวม 12 คอร์) พร้อม RAM 32 GB สิ่งนี้ทำให้เรามีงบประมาณ จำกัด สำหรับดิสก์อาเรย์ซึ่งโดยพื้นฐานแล้วจะประกอบด้วยไดรฟ์ SAS 300 GB 2.5 นิ้ว (15k RPM) สองตัวในการกำหนดค่า RAID 1 ฉันรู้ว่าการตั้งค่าดิสก์นั้นเหมาะสมที่สุดสำหรับ SQL Server และฉันต้องการผลักดัน RAID 10 จริงๆเพื่อให้เราสามารถวางฐานข้อมูลไฟล์บันทึกและ tempdb ลงในไดรฟ์ของตัวเอง เพื่อที่จะทำให้มันเข้ากันได้กับงบประมาณของเราฉันควรพิจารณาลดจำนวนคอร์ของ CPU …

2
เกี่ยวข้อง ExecutionInstanceGUID กับ SSISDB
SSIS, SQL Server Integration Services 2012 ได้เปิดตัวแคตตาล็อก SSISDB ซึ่งติดตามการทำงานของแพ็คเกจ (เหนือสิ่งอื่นใด) การดำเนินการแพ็คเกจเริ่มต้นสำหรับโซลูชันที่ใช้โมเดลการปรับใช้โครงการจะเปิดใช้งานการบันทึกลงใน SSISDB เมื่อแพคเกจดำเนินการSystem::ExecutionInstanceGUIDบรรจุด้วยค่าที่หากมีการใช้การบันทึกอย่างชัดเจน (ถึงsys.sysdtslog90/ sys.sysssislog) จะบันทึกเหตุการณ์ทั้งหมดสำหรับการดำเนินการแพคเกจเฉพาะ สิ่งที่ฉันอยากรู้คือฉันจะผูก ExecutionInstanceGUID กับอะไรในแคตตาล็อก SSISDB ได้อย่างไร อีกวิธีหนึ่งคือแพคเกจ SSIS ที่ทำงานใน SSISDB privy ค่าของมันcatalog.executions.execution_id ท้ายที่สุดฉันพยายามใช้ตารางการตรวจสอบที่มีอยู่แล้วและเชื่อมโยงกลับไปที่ประวัติโดยละเอียดในแคตตาล็อก SSISDB แต่ดูเหมือนจะไม่พบลิงก์

3
ปรับเปลี่ยนตารางทั้งหมดในฐานข้อมูลด้วยคำสั่งเดียว
มีคำสั่งเดียวหรือหนึ่งบรรทัดเพื่อแก้ไขตารางทั้งหมดภายในฐานข้อมูล ฉันต้องการออกคำสั่งนี้ในทุกตารางภายในฐานข้อมูล: ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8; วัตถุประสงค์ของฉันคือการแก้ไขชุดอักขระจาก latin1 เป็น utf8 เป็นตารางทั้งหมด ปรับปรุง: RDBMS คือ MySQL

2
ทำไมไม่ใช่ตัวเลข LIKE [0-9]
การเปรียบเทียบค่าเริ่มต้นของเซิร์ฟเวอร์ของฉันคือ Latin1_General_CI_AS ตามที่กำหนดโดยแบบสอบถามนี้: SELECT SERVERPROPERTY('Collation') AS Collation; ฉันรู้สึกประหลาดใจที่ค้นพบว่าด้วยการเปรียบเทียบนี้ฉันสามารถจับคู่อักขระที่ไม่ใช่ตัวเลขในสตริงโดยใช้เพLIKE '[0-9]'รดิเคต ทำไมในการจัดเรียงเริ่มต้นนี้เกิดขึ้นได้อย่างไร ฉันไม่สามารถนึกถึงกรณีที่สิ่งนี้จะเป็นประโยชน์ ฉันรู้ว่าฉันสามารถหลีกเลี่ยงพฤติกรรมนี้ได้โดยใช้การเปรียบเทียบแบบไบนารี แต่ดูเหมือนจะเป็นวิธีที่แปลกในการใช้การเปรียบเทียบแบบเริ่มต้น ตัวกรองหลักสร้าง caracters ที่ไม่ใช่ตัวเลข ฉันสามารถสาธิตพฤติกรรมโดยการสร้างคอลัมน์ที่มีค่าอักขระไบต์เดียวที่เป็นไปได้ทั้งหมดและกรองค่าด้วยภาคแสดงการจับคู่ตัวเลข คำสั่งต่อไปนี้สร้างตารางชั่วคราวที่มี 256 แถวหนึ่งแถวสำหรับรหัสแต่ละจุดในหน้ารหัสปัจจุบัน: WITH P0(_) AS (SELECT 0 UNION ALL SELECT 0), P1(_) AS (SELECT 0 FROM P0 AS L CROSS JOIN P0 AS R), P2(_) AS (SELECT 0 FROM P1 AS L …

1
ข้อใดดีกว่า: หลายเงื่อนไขเข้าร่วมหรือหลายเงื่อนไข
ฉันพยายามที่จะเปรียบเทียบคำถามที่สอง: แบบสอบถาม 1: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a WHERE tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d AND tableA.e=tableB.e แบบสอบถาม 2: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a AND tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d WHERE tableA.e=tableB.e ฉันถูกต้องหรือไม่ที่จะบอกว่าคำค้นหาทั้งสองนี้ให้ผลลัพธ์เหมือนกันหรือไม่ นอกจากนี้ถูกต้องหรือไม่ที่จะบอกว่าแบบสอบถามแรกสร้างตารางที่ใหญ่กว่าเพื่อทำWHEREเงื่อนไขที่ใหญ่กว่า ขณะที่กรณีที่สองเรามีตารางสร้างขนาดเล็กที่เรียบง่ายWHEREที่ใช้แล้ว สมมติว่าผลลัพธ์เหมือนกันควรเลือกแบบสอบถามใด มีปัญหาเรื่องประสิทธิภาพที่ชัดเจนหรือไม่?

3
มีวิธีการตรวจสอบว่าแบบสอบถาม SQL Server ทำงานในหน่วยความจำหรือไปที่ดิสก์?
ฉันเจอชุดของขั้นตอนการจัดเก็บในแอปพลิเคชันวันนี้ที่เรียกซ้ำ ๆ กันในกระบวนการที่ใช้เวลานาน ภายในแต่ละโพรซีเดอร์ฉันพบคำสั่งเลือกหลายคำสั่งบางคำสั่งในลูป ไม่น่าแปลกใจที่กิจวัตรเหล่านี้ที่ใช้ในปัจจุบันใช้เวลาหลายนาทีในการทำงาน ดูเหมือนว่าค่อนข้างชัดเจนว่าประสิทธิภาพไม่ได้ถูกนำมาพิจารณาเมื่อเขียนขั้นตอนเหล่านี้มีหลายสิ่งที่เป็นเพียง "ไม่ใช่ความคิดที่ดี" การประมวลผลแต่ละแถวเมื่อนำเข้าข้อมูลใช้เวลา 300ms ต่อแถวดังนั้นการนำเข้าขนาดเล็กจึงใช้เวลาประมวลผลหลายนาที อย่างไรก็ตามตารางที่เกี่ยวข้องกับกระบวนการส่วนใหญ่ค่อนข้างเล็ก ฉันคิดว่าถ้าตารางเหล่านี้ทั้งหมดอยู่ในความทรงจำอย่างเต็มที่บางทีอาจมีไม่มากนักที่จะได้รับจากการเขียนสิ่งนี้ ฉันกำลังพยายามหา .... สำหรับรหัสที่ไม่มีประสิทธิภาพนี้ชัดแจ้งว่ามีผลกระทบจริงเพียงใด มันคุ้มค่าที่จะแก้ไขหรือไม่ ดังนั้นคำถามคือ: - มีวิธีการกำหนดตารางใดตรึงในหน่วยความจำทั้งหมดหรือไม่ - มีวิธีเปิดใช้การติดตามเพื่อตรวจสอบขั้นตอนการจัดเก็บซ้อนเพื่อค้นหาส่วนที่มีราคาแพงโดยเฉพาะหรือไม่ หมายเหตุ: สิ่งนี้อยู่ใน SQL Server 2008 R2

4
ฉันใช้ SQL Server Agent เพื่อกำหนดเวลาแม้แต่งานที่ไม่ใช่ฐานข้อมูล - นี่เป็นความคิดที่ไม่ดีใช่ไหม
เนื่องจากฉันเป็น DBA (และในหลาย ๆ กรณีระบบปฏิบัติการจริง) ดังนั้น SQL Server จึงได้รับการติดตั้งบนเซิร์ฟเวอร์ทุกเครื่องที่ฉันต้องทำงานเป็นประจำ ฉันเพิ่งรู้ว่าฉันใช้ SQL Agent เป็นตัวกำหนดเวลางานในเกือบทุกกรณีแทนที่จะเป็น Windows Task Scheduler จากมุมมองของฉันตัวแทน SQL มีข้อได้เปรียบเหนือ Windows Task Scheduler หลายประการ: รีโมต (จากเวิร์กสเตชันของฉัน) เริ่ม / หยุด / ตรวจสอบงาน แชร์กำหนดการ (ไม่ใช่แต่ละงานด้วยตัวเอง) หลายขั้นตอนและการควบคุมการไหล งานประเภทต่าง ๆ แจ้งเตือนเมื่อความล้มเหลว / เสร็จสิ้น สามารถกำหนดค่าให้ทำหน้าที่ผู้ใช้ที่แตกต่างกัน (ปานกลาง) ข้อความแสดงข้อผิดพลาดอธิบายมากกว่ารหัสข้อผิดพลาด อย่างไรก็ตามฉันไม่สามารถหลบหนีจากความรู้สึกที่ว่านี่เป็นแนวปฏิบัติที่ไม่ดี - SQL Agent ควรสำรองไว้สำหรับงานที่เกี่ยวข้องกับฐานข้อมูลเท่านั้นและฉันควรปล่อยให้ระบบปฏิบัติการระดับทำงานใน Windows Task Scheduler แม้ว่าฉันจะไม่ชอบการใช้งานก็ตาม …

5
เพจจิ้งทำงานกับ ROW_NUMBER ใน SQL Server ได้อย่างไร
ฉันมีEmployeeตารางที่มีหนึ่งล้านบันทึก ฉันได้ติดตาม SQL สำหรับข้อมูลการเพจในเว็บแอปพลิเคชัน มันทำงานได้ดี อย่างไรก็ตามสิ่งที่ฉันเห็นว่าเป็นปัญหาคือ - ตารางที่ได้รับtblEmployeeจะเลือกระเบียนทั้งหมดในEmployeeตาราง (เพื่อสร้าง MyRowNumberค่า) ฉันคิดว่านี่เป็นสาเหตุของการเลือกระเบียนทั้งหมดในEmployeeตาราง มันใช้งานได้จริงเหรอ? หรือ SQL Server นั้นได้รับการปรับแต่งให้เลือกเฉพาะ 5 ระเบียนจากEmployeeตารางต้นฉบับด้วยหรือไม่ DECLARE @Index INT; DECLARE @PageSize INT; SET @Index = 3; SET @PageSize = 5; SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,* FROM Employee) tblEmployee WHERE MyRowNumber BETWEEN …

1
SQL Server 2008 เก็บวันที่สร้างแผนการดำเนินการหรือไม่
เราเพิ่งอัปเกรดแอปพลิเคชันที่เราใช้ซึ่งเกี่ยวข้องกับการแก้ไขสคีมาสำหรับฐานข้อมูล การเปลี่ยนแปลงเหล่านี้อาจบังคับให้แผนการดำเนินการแคชถูกยกเลิก หาก SQL Server ถูกบังคับให้สร้างแผนใหม่จำนวนมากสิ่งนี้อาจทำให้ประสบการณ์ผู้ใช้ช้าลง ฉันต้องการตรวจสอบว่าเป็นกรณีนี้หรือไม่ ดังนั้นคำถามของฉันคือ SQL Server 2008 เก็บวันที่สร้างแผนการดำเนินการที่แคชหรือไม่ มุมมองการจัดการsys.dm_exec_cached_plansไม่มีฟิลด์วันที่ใด ๆ ดังนั้นฉันจึงไม่สงสัย

1
การเชื่อมต่อเซิร์ฟเวอร์ ODBC แหล่งข้อมูล SQL Server - การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้
ฉันย้ายฐานข้อมูลของฉันจาก SQL 2005 ไปยังเซิร์ฟเวอร์ที่มี SQL 2008 ตอนนี้ฉันกำลังพยายามสร้างแหล่งข้อมูล ODBC ฉันใช้ "ด้วยการรับรองความถูกต้องของเซิร์ฟเวอร์ SQL โดยใช้รหัสเข้าสู่ระบบและรหัสผ่านที่ป้อนโดยผู้ใช้" และได้เข้าสู่ระบบและรหัสผ่านของฉัน การเข้าสู่ระบบจะมองเห็นได้ใน SQL Server Management Studio ภายใต้ความปลอดภัย -> เข้าสู่ระบบ การเข้าสู่ระบบยังมีคุณสมบัติที่แน่นอนของการเข้าสู่ระบบเดียวกันในเซิร์ฟเวอร์เก่าของฉัน เมื่อฉันกดปุ่มถัดไปหลังจากป้อนชื่อผู้ใช้และรหัสผ่านฉันจะได้รับ: Connection failed: SQLState: '28000' SQL Server Error: 18456 [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myUser'. หลังจากอ่านสิ่งนี้: http://support.microsoft.com/kb/555332ฉันรู้ว่าคุณสมบัติเซิร์ฟเวอร์ถูกตั้งค่าเป็น "Windows Authentication Mode" เท่านั้น แต่แม้หลังจากเปลี่ยนเป็น "SQL Server และ …

4
ไม่สามารถปิด postmaster เก่าเมื่ออัปเกรดเป็น Postgres 9.2
ฉันกำลังอัปเกรดเป็น Postgres 9.2.2 (จาก 9.1.4) เมื่อฉันพยายามอัพเกรด DBs โดยใช้: pg_upgrade -b /usr/local/Cellar/postgresql/9.1.4/bin -B /usr/local/Cellar/postgresql/9.2.2/bin -d /usr/local/var/postgres91 -D /usr/local/var/postgres ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok There seems to be a postmaster servicing the old cluster. Please shutdown that postmaster and try again. Failure, exiting ฉันพยายามหยุดเซิร์ฟเวอร์ แต่ไม่สามารถให้คำสั่งอัปเกรดทำงานได้ …


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