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

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

1
ปัญหาการสำรองข้อมูลต่างกัน - เพราะเหตุใด เป็นไปได้ไหม
ฉันใช้ SQL Server 2014 และนี่คือสถานการณ์: ฉันมีเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B ETL ข้ามคืนประมวลผลบนเซิร์ฟเวอร์ A หลังจากกระบวนการโหลดเสร็จสิ้นฐานข้อมูล X จะได้รับการสำรอง (ด้วยCHECKSUMและRESTORE VERIFYONLYเพื่อให้มั่นใจในความน่าเชื่อถือ) จากนั้นจะถูกส่งไปยังเซิร์ฟเวอร์ B เซิร์ฟเวอร์ B ได้รับbakไฟล์จากนั้นกู้คืนฐานข้อมูลที่นั่น ฉันต้องการใช้กลยุทธ์การสำรองข้อมูลที่แตกต่างกันเพื่อที่: การสำรองข้อมูลทั้งหมดจะทำในวันเสาร์เท่านั้น เช่นการสำรองข้อมูลเต็มรูปแบบบนเซิร์ฟเวอร์ A ในวันเสาร์ -> จัดส่งไปยังเซิร์ฟเวอร์ B -> กู้คืนการสำรองข้อมูลเต็มรูปแบบบนเซิร์ฟเวอร์ B ส่วนที่เหลือของวันจะเป็นการสำรองข้อมูลที่แตกต่างกัน เช่นการสำรองข้อมูลที่แตกต่างกันบนเซิร์ฟเวอร์ A -> จัดส่งไปยังเซิร์ฟเวอร์ B -> เรียกคืนการสำรองข้อมูลต่างกันในเซิร์ฟเวอร์ B ฉันได้ลองแล้ว แต่ฉันพบข้อผิดพลาดว่า: ไม่สามารถกู้คืนบันทึกหรือการสำรองข้อมูลส่วนต่างได้เนื่องจากไม่มีไฟล์พร้อมที่จะเปิดใช้งาน ไม่แน่ใจว่าทำไม ฉันตรวจสอบsys.database_filesบนเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B …

1
วิธีการจำลองสถานะหน่วยความจำต่ำเมื่อเรียกใช้แบบสอบถาม
ฉันพยายามที่จะเข้าใจวิธีการทำงานของโปรแกรมการทำงานของ SQL Server ให้ดีขึ้นในสถานะหน่วยความจำต่ำ พูดในแง่ของเงินอุดหนุนหน่วยความจำผมสงสัยว่าถ้ามีวิธีที่จะบังคับให้บางส่วนจะเท่ากับGrantedMemory RequiredMemory(ฉันเดาว่ามีสถานะการติดตามที่ไม่มีเอกสารซึ่งจะทำอย่างนั้นใครรู้ว่ามันคืออะไร?)

1
พฤติกรรมที่ไม่ถูกต้องของ SQL Server 2016 ด้วยตารางที่ปรับให้เหมาะสมหน่วยความจำ
โปรดดูแบบสอบถาม SQL ต่อไปนี้: CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE ( source_col INT NULL, target_col INT not NULL INDEX ix_InMemoryTable NONCLUSTERED (target_col) ) WITH (MEMORY_OPTIMIZED = ON) GO DECLARE @t dbo.IN_MEMORY_TABLE_TYPE INSERT @t ( source_col, target_col ) VALUES (10, 0), (0, 0) UPDATE r1 SET target_col = -1 FROM @t r1 WHERE …

3
ดำเนินการสืบค้นโดยอัตโนมัติใน MS SQL Studio ทุกชั่วโมง
ฉันสนับสนุนแอปพลิเคชันในองค์กรขนาดใหญ่หนึ่งในบทบาทของฉันคือการล้างข้อมูล มีแบบสอบถามที่ฉันต้องดำเนินการทุกชั่วโมงและฉันต้องการจะทำมันโดยอัตโนมัติ เนื่องจากนโยบายองค์กรฉันไม่สามารถสร้างงาน SQL Server Agent หรือแก้ไขสคีมาได้ฉันสามารถจัดการข้อมูลได้เท่านั้น ไม่มีที่สิ้นสุด WHILE(1=1) BEGIN WAITFOR DELAY '01:00'; --do work END ทำงานให้ฉันได้ แต่ฉันยักความคิดเกี่ยวกับการเชื่อมต่อแบบเปิดโล่ง เป็นการดีที่ฉันจะสคริปต์ MS SS ตัวเองเพื่อรันชิ้นส่วนของรหัสที่กำหนดทุกชั่วโมง แต่ฉันไม่แน่ใจว่าเป็นไปได้ มีวิธีแก้ไขปัญหานี้หรือไม่?

3
เอาชนะข้อจำกัดความยาวอักขระ LIKE
โดยการอ่านข้อจำกัดความยาวของตัวละคร LIKEที่นี่ดูเหมือนว่าฉันไม่สามารถส่งข้อความที่ยาวเกิน ~ 4000 ตัวอักษรในประโยค LIKE ฉันพยายามดึงแผนแบบสอบถามจากแคชแผนแบบสอบถามสำหรับแบบสอบถามเฉพาะ SELECT * FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st where st.text like '%MY_QUERY_LONGER_THAN_4000_CHARS%' ESCAPE '?' หากแบบสอบถามภายในLIKEตัวอักษรยาวเกิน 4,000 ตัวอักษรฉันจะได้ผลลัพธ์ 0 ถึงแม้ว่าแบบสอบถามของฉันจะอยู่ในแผนแคช (ฉันคาดหวังอย่างน้อย erorr) มีวิธีแก้ไขปัญหานี้หรือจะทำแตกต่างกันอย่างไร ผมมีข้อสงสัยซึ่งสามารถ> ตัวอักษรที่ยาวนานและมีลักษณะเหมือนที่ฉันไม่สามารถหาพวกเขาด้วย10000LIKE

2
เหตุใดการวางกุญแจต่างประเทศจึงใช้เวลานาน?
ฉันได้สร้างสคริปต์ที่หนึ่งครั้งลบกุญแจต่างประเทศทั้งหมดจากฐานข้อมูลเช่นนี้: ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2 สิ่งที่ทำให้ฉันประหลาดใจคือสคริปต์ใช้เวลานาน: โดยเฉลี่ย 20 วินาทีสำหรับแต่ละ DROP FK ตอนนี้ฉันเข้าใจว่าการสร้าง FK อาจเป็นเรื่องใหญ่เพราะเซิร์ฟเวอร์ต้องดำเนินการและตรวจสอบว่าข้อ จำกัด FK ไม่ได้ถูกละเมิดตั้งแต่เริ่มแรก แต่เป็นการลดลงใช่ไหม เซิร์ฟเวอร์ทำอะไรเมื่อปล่อย FKs ที่ใช้เวลานาน นี่เป็นทั้งความอยากรู้อยากเห็นของฉันเองและเพื่อให้เข้าใจว่ามีวิธีที่จะทำให้สิ่งต่าง ๆ เร็วขึ้นหรือไม่ ความสามารถในการลบ FK (ไม่ใช่แค่ปิดการใช้งาน) จะช่วยให้ฉันเร็วขึ้นมากในระหว่างการย้ายข้อมูลและลดเวลาหยุดทำงาน

1
ตัวนับ Perfmon เคาน์เตอร์“ แผนไม่ได้ผล / วินาที” จริง ๆ แล้ววัดอะไร?
ใน SQL Server ตัวนับ Perfmon "Workload Group Stats: Suboptimal แผน / วินาที" วัดอะไร เป็นหนึ่งในเคาน์เตอร์ผู้ว่าการทรัพยากรดังนั้นจึงวัดได้ที่กลุ่มเวิร์กโหลด (ซึ่งคุณมีว่าคุณกำหนดค่า RG หรือไม่) ฉันไม่ได้ถามว่าอะไรทำให้แผนดีหรือแผนไม่ดี แต่สิ่งที่ทำกันโดยเฉพาะมาตรการที่เคาน์เตอร์และคุณจะไปหาแผนการที่สอดคล้องกันที่ไหน? ตัวอย่างเช่นฉันไม่พบสิ่งใดในกิจกรรมเพิ่มเติมที่ดูเหมือนจะตรงกับแบบสอบถามที่เรียกใช้ตัวนับ "แผน / วินาที" ที่ไม่ดี
13 sql-server 

2
ทางเลือกในการ MakeValid () สำหรับข้อมูลเชิงพื้นที่ใน SQL Server 2016
ฉันมีตารางLINESTRINGข้อมูลทางภูมิศาสตร์จำนวนมากที่ฉันย้ายจาก Oracle ไปยัง SQL Server มีการประเมินจำนวนหนึ่งที่ดำเนินการกับข้อมูลนี้ใน Oracle และพวกเขาจะต้องดำเนินการกับข้อมูลใน SQL Server ด้วย ปัญหา: SQL Server มีข้อกำหนดที่เข้มงวดยิ่งขึ้นสำหรับการใช้ที่ถูกต้องLINESTRINGกว่า Oracle; "อินสแตนซ์ LineString ไม่สามารถทับซ้อนกันในช่วงเวลาสองจุดหรือมากกว่าติดต่อกัน" มันก็เกิดขึ้นที่เปอร์เซ็นต์ของเราLINESTRINGไม่เป็นไปตามเกณฑ์นั้นซึ่งหมายความว่าฟังก์ชั่นที่เราต้องประเมินข้อมูลล้มเหลว ฉันต้องการปรับข้อมูลเพื่อให้สามารถตรวจสอบความถูกต้องได้สำเร็จใน SQL Server ตัวอย่างเช่น: ตรวจสอบง่ายมากLINESTRINGที่กลับมาที่ตัวเอง: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed() 24413: Not valid because of two overlapping edges in curve (1). การดำเนินการกับMakeValidฟังก์ชัน: select …

4
ฉันจะแปลงจำนวนเต็มบวก 100 ล้านตัวแรกเป็นสตริงได้อย่างไร
นี่คือการเบี่ยงเบนจากปัญหาจริง หากการจัดเตรียมบริบทช่วยให้การสร้างข้อมูลนี้อาจเป็นประโยชน์สำหรับวิธีการทดสอบประสิทธิภาพของการประมวลผลสตริงสำหรับการสร้างสตริงที่ต้องมีการดำเนินการบางอย่างที่นำไปใช้กับพวกเขาภายในเคอร์เซอร์หรือสำหรับการสร้างชื่อเฉพาะ ฉันแค่สนใจวิธีที่มีประสิทธิภาพในการสร้างข้อมูลภายในเซิร์ฟเวอร์ SQL โปรดอย่าถามว่าทำไมฉันจึงต้องสร้างข้อมูลนี้ ฉันจะพยายามเริ่มด้วยคำนิยามที่ค่อนข้างเป็นทางการ สตริงจะรวมอยู่ในชุดข้อมูลหากประกอบด้วยตัวอักษรพิมพ์ใหญ่จาก A - Z เทอมแรกของชุดคือ "A" ชุดประกอบด้วยสตริงที่ถูกต้องทั้งหมดเรียงตามความยาวก่อนและตามลำดับตัวอักษรทั่วไปที่สอง หากสายอยู่ในตารางในคอลัมน์ที่เรียกว่าSTRING_COLคำสั่งซื้อจะถูกกำหนดไว้ใน T-SQL ORDER BY LEN(STRING_COL) ASC, STRING_COL ASCเป็น เพื่อให้คำจำกัดความที่เป็นทางการน้อยลงให้ดูที่ส่วนหัวคอลัมน์ตามตัวอักษรใน excel ชุดเป็นรูปแบบเดียวกัน ลองพิจารณาว่าคุณจะแปลงจำนวนเต็มเป็นฐาน 26 ได้อย่างไร: 1 -> A, 2 -> B, 3 -> C, ... , 25 -> Y, 26 -> Z, 27 -> AA, 28 -> AB, …

1
ฉันจะป้องกัน UNPIVOT ไม่ให้ถูกแปลงเป็น UNION ALL ได้อย่างไร
ฉันมีแบบสอบถามของ Oracle ที่ค่อนข้างซับซ้อนซึ่งใช้เวลาประมาณครึ่งชั่วโมง ถ้าฉันใช้ส่วนที่ช้าของแบบสอบถามและเรียกใช้แยกต่างหากมันจะเสร็จสิ้นในไม่กี่วินาที นี่คือภาพหน้าจอของรายงานการตรวจสอบ SQL สำหรับข้อความค้นหาแยก: นี่คือตรรกะเดียวกันเมื่อเรียกใช้เป็นส่วนหนึ่งของแบบสอบถามแบบเต็ม: สีตรงกับตารางเดียวกันในภาพหน้าจอทั้งสอง สำหรับคำช้า, Oracle จะทำระหว่างสองตารางที่ไม่ได้มีสภาพความเท่าเทียมกันในMERGE JOIN JOINด้วยเหตุนี้จึงมีการประมวลผลแถวกลางประมาณ 150 ล้านแถว ฉันสามารถแก้ไขปัญหานี้ด้วยคำแนะนำการสืบค้นหรือการเขียนใหม่ แต่ฉันต้องการเข้าใจสาเหตุของปัญหาได้มากเท่าที่จะทำได้เพื่อที่ฉันจะได้สามารถหลีกเลี่ยงปัญหานี้ได้ในอนาคตและอาจส่งรายงานข้อผิดพลาดไปยัง Oracle ทุกครั้งที่ฉันได้รับแผนไม่ดีUNPIVOTในข้อความแบบสอบถามจะถูกแปลงเป็นUNION ALLในแผน หากต้องการตรวจสอบเพิ่มเติมฉันต้องการป้องกันไม่ให้เกิดการเปลี่ยนแปลงการค้นหา ฉันไม่สามารถหาชื่อสำหรับการเปลี่ยนแปลงนี้ได้ ฉันยังไม่สามารถค้นหาคำใบ้หรือพารามิเตอร์ขีดล่างที่จะป้องกันได้ ฉันกำลังทดสอบเซิร์ฟเวอร์การพัฒนาเพื่อให้มีอะไรเกิดขึ้น มีอะไรที่ฉันสามารถทำได้เพื่อป้องกันการเปลี่ยนแปลงแบบสอบถามของUNPIVOTการUNION ALL? ฉันใช้ Oracle 12.1.0.2 ฉันไม่สามารถแชร์คิวรีชื่อตารางหรือข้อมูลด้วยเหตุผล IP ฉันไม่สามารถคิดแบบง่าย ๆ ได้ จากที่กล่าวมามันไม่ชัดเจนสำหรับฉันว่าทำไมข้อมูลนั้นจำเป็นต้องใช้ในการตอบคำถาม นี่คือตัวอย่างของแบบสอบถาม UNPIVOT พร้อมกับแบบสอบถามเดียวกันที่ใช้กับ UNION ALL

6
เหตุใดฉันไม่สามารถใช้ค่า Null ในการเข้าร่วมได้
ฉันได้แก้ไขปัญหาการสืบค้นโดยใช้ ... row_number() over (partition by... นี่เป็นคำถามทั่วไปเพิ่มเติมเกี่ยวกับสาเหตุที่เราไม่สามารถใช้คอลัมน์ที่มีค่า Null ในการเข้าร่วมได้ เหตุใดค่าโมฆะจึงไม่เท่ากับค่าว่างเพื่อการเข้าร่วม?
13 oracle  join  null 

7
การจัดกลุ่มหรือหน้าต่าง
ฉันมีสถานการณ์ที่ฉันคิดว่าสามารถแก้ไขได้โดยใช้ฟังก์ชั่นหน้าต่าง แต่ฉันไม่แน่ใจ ลองนึกภาพตารางต่อไปนี้ CREATE TABLE tmp ( date timestamp, id_type integer ) ; INSERT INTO tmp ( date, id_type ) VALUES ( '2017-01-10 07:19:21.0', 3 ), ( '2017-01-10 07:19:22.0', 3 ), ( '2017-01-10 07:19:23.1', 3 ), ( '2017-01-10 07:19:24.1', 3 ), ( '2017-01-10 07:19:25.0', 3 ), ( '2017-01-10 07:19:26.0', 5 …

1
ความแตกต่างระหว่าง“ และ” และ“ &”
ฉันพยายามที่จะเข้าใจลำดับความสำคัญของการดำเนินการทางตรรกะและมีรหัสต่อไปนี้: declare @T bit ='TRUE' declare @F bit ='False' print @T and @F และจะส่งคืนข้อผิดพลาดเป็น ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'และ' ฉันแทนที่ 'และ' ด้วย '&' และรหัสทำงานอีกครั้ง ทำไมรหัสเดิมไม่ทำงาน ฉันใช้เซิร์ฟเวอร์ SQL
13 sql-server  t-sql 

1
รับการจับคู่บางส่วนจากคอลัมน์ TSVECTOR ที่จัดทำดัชนีโดย GIN
ฉันต้องการได้รับผลลัพธ์จากแบบสอบถามนี้: SELECT * FROM ( SELECT id, subject FROM mailboxes WHERE tsv @@ plainto_tsquery('avail') ) AS t1 ORDER by id DESC; งานนี้และแถวกลับมาพร้อมกับมีtsv Availableแต่ถ้าฉันใช้avai(ดร็อปlable) มันไม่สามารถหาอะไรได้เลย คำค้นหาทั้งหมดต้องอยู่ในพจนานุกรมหรือไม่ เราไม่สามารถค้นหาจดหมายเช่นนั้นได้หรือ ฉันมีฐานข้อมูลที่มีเนื้อหาอีเมล (เนื้อหา) และฉันต้องการทำให้มันเร็วขึ้นเรื่อย ๆ ทุกวัน ขณะนี้ฉันกำลังใช้ ... WHERE content ~* 'letters`

2
@os_run_priority ใน sp_add_jobstep ใช้งานได้จริงใน SQL Server 2008 R2 หรือไม่
ไม่@os_run_priorityในsp_add_jobstepการทำงานจริงใน SQL Server 2008 R2? มันอธิบายว่า "สงวน" หรือ "ไม่มีเอกสาร" อย่างไรก็ตามฉันเห็นในsp_add_jobstepนิยาม: @os_run_priority INT = 0, -- -15 = Idle, -1 = Below Normal, 0 = Normal, 1 = Above Normal, 15 = Time Critical)

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