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

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

2
วิธีเก็บประวัติของ SQL Server ที่จัดเก็บการแก้ไขขั้นตอน
หมายเหตุ: ฉันไม่ได้ถามเกี่ยวกับการควบคุมเวอร์ชันเต็ม มีวิธีใดโดยอัตโนมัติในการเก็บประวัติของกระบวนงานที่เก็บไว้ใน SQL Server คล้ายกับวิธีที่ Google เอกสารเก็บประวัติเวอร์ชันของเอกสารโดยอัตโนมัติและ Wikipedia เก็บประวัติเวอร์ชันของบทความโดยอัตโนมัติ ฉันไม่ต้องการให้ผู้ใช้อัปเดตกระบวนงานที่เก็บไว้เพื่อรักษาพื้นที่เก็บข้อมูลของขั้นตอนการจัดเก็บไว้ด้วย นี่เป็นงานมากเกินไปและผู้คนจะไม่ทำ หวังว่านี่คือสิ่งที่ฉันสามารถเปิดใน SQL Server ... (และโดยขั้นตอนการจัดเก็บจริงๆฉันหมายถึงฟังก์ชั่นทริกเกอร์ ฯลฯ โดยทั่วไปทุกอย่างภายใต้ความสามารถในการโปรแกรม) ฉันโพสต์ไปที่/programming/14522224/how-to-keep-history-of-sql-server-stored-procedure-revisionsก่อนเพราะฉันสงสัยว่ามันจะได้รับมุมมองเพิ่มเติมที่นั่น

4
มีวิธีสร้างตารางสร้างสคริปต์ใน TSQL หรือไม่?
มีวิธีสร้างสคริปต์สร้างจากตารางที่มีอยู่ใน T-SQL (โดยไม่ใช้ SMO เนื่องจาก T-SQL ไม่สามารถเข้าถึง SMO ได้) สมมติว่าเป็นกระบวนงานที่เก็บไว้ที่รับชื่อตารางและส่งคืนสตริงที่มีสคริปต์สร้างสำหรับตารางที่กำหนดหรือไม่ ตอนนี้ให้ฉันอธิบายสถานการณ์ที่ฉันกำลังเผชิญเนื่องจากอาจมีวิธีอื่นในการเข้าถึงสิ่งนี้ ฉันมีอินสแตนซ์ที่มีฐานข้อมูลหลายโหล ฐานข้อมูลเหล่านี้ทั้งหมดมีสคีมาเหมือนกันทั้งหมดตารางเดียวกันดัชนีและอื่น ๆ พวกเขาถูกสร้างขึ้นเป็นส่วนหนึ่งของการติดตั้งซอฟต์แวร์บุคคลที่สาม ฉันต้องมีวิธีในการทำงานกับพวกเขาเพื่อให้ฉันสามารถรวบรวมข้อมูลจากพวกเขาในลักษณะเฉพาะกิจ ผู้คนที่ดีที่ dba.se ได้ช่วยฉันที่นี่แล้วจะสร้างทริกเกอร์ในฐานข้อมูลอื่นได้อย่างไร ขณะนี้ฉันต้องการค้นหาวิธีการเลือกจากตารางในฐานข้อมูลทั้งหมด ฉันได้บันทึกชื่อฐานข้อมูลทั้งหมดลงในตารางที่เรียกDatabaseesและฉันเขียนสคริปต์ต่อไปนี้เพื่อดำเนินการคำสั่งที่เลือกในพวกเขาทั้งหมด: IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 …

3
จะมีความสัมพันธ์แบบตัวต่อตัวกับเด็กที่มีสิทธิพิเศษอย่างไร
ฉันต้องการที่จะมีความสัมพันธ์แบบหนึ่งต่อหลายคนซึ่งสำหรับผู้ปกครองแต่ละคนเด็กหนึ่งหรือศูนย์ถูกทำเครื่องหมายเป็น "รายการโปรด" อย่างไรก็ตามผู้ปกครองทุกคนจะไม่มีลูก (นึกถึงผู้ปกครองว่าเป็นคำถามในไซต์นี้เด็ก ๆ เป็นคำตอบและชอบเป็นคำตอบที่ยอมรับ) ตัวอย่างเช่น TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id วิธีที่ฉันเห็นฉันสามารถเพิ่มคอลัมน์ต่อไปนี้ใน TableA: FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id หรือคอลัมน์ต่อไปนี้เพื่อ TableB: IsFavorite BIT NOT NULL ปัญหาเกี่ยวกับวิธีแรกคือมันแนะนำคีย์ต่างประเทศที่ไม่มีค่าซึ่งฉันเข้าใจว่าไม่ได้อยู่ในรูปแบบปกติ ปัญหาเกี่ยวกับแนวทางที่สองคือต้องทำงานมากกว่านี้เพื่อให้แน่ใจว่าเด็กส่วนใหญ่จะเป็นคนโปรด เกณฑ์ประเภทใดที่ฉันควรใช้เพื่อกำหนดวิธีการที่จะใช้ หรือมีวิธีอื่นที่ฉันไม่ได้พิจารณาหรือไม่? ฉันใช้ SQL Server 2012

1
ทำไม SQL Server 2012 Express ใช้ RAM 9.5GB บนเซิร์ฟเวอร์ของฉัน
ฉันกำลังสร้างแอปพลิเคชันที่ฉันวางแผนจะฝัง SQL Server 2012 Express เป็นที่เก็บข้อมูลหลัก เมื่อทำการทดสอบบนเครื่องพัฒนาของฉัน (Win7-32 ​​ที่มี RAM 3GB) ฉันไม่เคยสังเกตว่าsqlservr.exeกระบวนการใช้ RAM มากกว่า 1GB อย่างที่ฉันคาดไว้จากการจำกัด ขนาดของฮาร์ดแวร์ที่เผยแพร่สำหรับ SQL Server รุ่น Express จากนั้นฉันย้ายแอปพลิเคชันของฉันไปยังเครื่องระดับเซิร์ฟเวอร์ (Win Server 2008R2 64- บิตพร้อม RAM 16GB) เพื่อประเมินประสิทธิภาพการทำงานที่นั่นและรู้สึกประหลาดใจที่พบว่าsqlservr.exeกระบวนการขยายอย่างรวดเร็วไปเป็นแรม 9.5GB และอยู่ที่นั่น ฉันรีสตาร์ทสองสามครั้งเพื่อดูว่าจะมีผลกระทบใด ๆ หรือไม่ แต่ในแต่ละครั้งกระบวนการจะกลับไปที่ ~ 9.5GB อย่างรวดเร็ว ตอนนี้ฉันรู้สึกยินดีอย่างยิ่งที่มี SQL Server Express ใช้ RAM ของฉัน แต่ฉันอยากจะรู้ว่านี่เป็นพฤติกรรมที่คาดหวังหรือไม่ดังนั้นฉันจึงไม่ต้องพึ่งพาระดับประสิทธิภาพที่ขึ้นอยู่กับการใช้ RAM ที่ไม่ถูกต้อง FYI …

2
LIKE ใช้ดัชนี CHARINDEX ไม่ได้หรือ
คำถามนี้เป็นคำถามที่เกี่ยวข้องกับคำถามเก่าของฉัน ข้อความค้นหาด้านล่างนี้ใช้เวลาดำเนินการ 10 ถึง 15 วินาที: SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0) ในบางบทความฉันเห็นว่าการใช้CASTและCHARINDEXจะไม่ได้รับประโยชน์จากการจัดทำดัชนี นอกจากนี้ยังมีบทความบางส่วนที่กล่าวว่าการใช้LIKE '%abc%'จะไม่ได้รับประโยชน์จากการทำดัชนีในขณะที่LIKE 'abc%': http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement- สำหรับ -like-query http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568 ในกรณีของฉันฉันสามารถเขียนแบบสอบถามเป็น: SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%' แบบสอบถามนี้ให้ผลลัพธ์เช่นเดียวกับรายการก่อนหน้า ผมได้สร้างดัชนี nonclustered Phone noสำหรับคอลัมน์ เมื่อผมดำเนินการค้นหานี้มันจะทำงานในเวลาเพียง1 วินาที นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เมื่อเทียบกับ14 วินาทีก่อนหน้านี้ วิธีการที่ไม่LIKE '%123456789%'ได้รับประโยชน์จากการจัดทำดัชนี? เหตุใดบทความที่ระบุจึงไม่สามารถปรับปรุงประสิทธิภาพได้ ฉันพยายามเขียนแบบสอบถามใหม่เพื่อใช้CHARINDEXแต่ประสิทธิภาพยังคงช้า เหตุใดจึงไม่CHARINDEXได้ประโยชน์จากการจัดทำดัชนีตามที่ปรากฏในLIKEแบบสอบถาม …

2
เป็นวิธีที่ทันสมัยในการแบ่งพาร์ติชัน PostgreSQL ในเครื่องต่าง ๆ เมื่อข้อมูลคือ“ การแบ่งพาร์ติชันตามธรรมชาติ”
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา หลังจากผ่านไปหลายปีที่อาศัยอยู่ในพื้นที่ "NoSQL" ตอนนี้ฉันมีปัญหาที่ค่อนข้าง "เชิงสัมพันธ์" ในธรรมชาติ วันนี้ฉันเห็นร้านค้าข้อมูลที่มีดวงตาที่แตกต่างไปจากเดิม สิ่งที่คล้ายกับ Riak ทำให้ฉันเสียไปในทางที่ฉันจะทนต่อความล้มเหลวเพียงจุดเดียวไม่ได้อีกต่อไป "ลงเพื่อซ่อมบำรุง" ฯลฯ แน่นอนว่า (หรือฉันหวังว่า) ฉันไม่ได้สติเสียอีกเลย นี่เป็นโครงการส่วนบุคคลที่ยังไม่ค่อยมีข้อกำหนดที่สูงมาก วิธีแก้ไขปัญหาส่วนใหญ่ไม่ได้ให้สิ่งที่ฉันต้องการ (อย่างน้อยก็เหลือบ) อาจเป็นเพราะปัญหาของฉันค่อนข้าง "ง่าย" ในการแก้ปัญหา อย่างน้อยในระดับแนวคิด (ละเว้นข้อ จำกัด ที่ RDBMs นำมาสู่ตาราง) ฉันมีข้อมูล "แบ่งปัน" เล็กน้อยซึ่งสามารถทำซ้ำได้อย่างอิสระ มันไม่ได้มีข้อกำหนดของความมั่นคงอย่างหนัก สิ่งนี้สามารถเก็บไว้ในฐานข้อมูลที่เหมือนไดนาโมและจะขยายได้อย่างไม่ จำกัด แต่ฉันก็ยังอยากจะไปกับฐานข้อมูลเดียวถ้าเป็นไปได้ ฉันมีข้อมูล "ต่อผู้ใช้" มากมาย นั่นคือ - ผู้ใช้จำนวนมากด้วยผู้ใช้ทุกคนที่มีข้อมูลที่มีขนาดพอเหมาะพอดีจะเก็บไว้ในโหนด …

3
ควรตั้งค่าการจำลองแบบทาสของ MySQL ให้อ่านได้อย่างเดียวหรือไม่?
ฉันได้รับการจำลองแบบที่ทำงานบน Percona Server 5.5 โดยทำตามคำแนะนำนี้และสงสัยว่าฉันควรจะเพิ่มread-only=1ทาสของฉันmy.cnfเพื่อให้อ่านได้อย่างเดียวหรือไม่? คู่มือการตั้งค่าการจำลองแบบสำหรับตาราง mysql เพื่อให้ผู้ใช้มีการจำลองแบบ แต่ฉันส่วนใหญ่ใช้ทาสที่จะใช้ mysqldumps, ในกรณีฉุกเฉินการกำหนดค่าใหม่ให้เป็นหลักดังนั้นฉันไม่เชื่อว่าเราต้องการ (หรือควรมี) เขียนเปิดใช้งาน มันตลอดเวลา?

5
ฉันจะสร้างไฟล์ tnsnames.ora เพื่อเชื่อมต่อกับฐานข้อมูล Oracle ได้อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันติดตั้ง Oracle 11g แล้วและฉันสามารถเชื่อมต่อsysmanกับฐานข้อมูล Oracle ได้ แต่ไม่มีtnsnames.oraไฟล์ที่ฉันสามารถค้นหาได้ ฉันจำเป็นต้องสร้างไฟล์ tnsnames.ora ด้วยตัวเองหรือไม่? ถ้าเป็นเช่นนั้นฉันจะวางที่ไหน ถ้าไม่ Oracle สร้างมันให้ฉันได้อย่างไร ถ้าฉันจำเป็นต้องสร้างมันขึ้นมามันคืออะไรที่เหมาะสำหรับไฟล์ไวยากรณ์?
22 oracle 

1
แบบสอบถาม SQL สำหรับชุดค่าผสมโดยไม่ต้องทำซ้ำ
ฉันต้องการแบบสอบถามที่สามารถใช้ใน (หรือตาม) ฟังก์ชั่นและดึงการรวมกันของค่า n ทั้งหมด และฉันต้องการความยาวทั้งหมด k โดยที่ k = 1..n ตัวอย่างอินพุตเพิ่มเติมและผลลัพธ์ดังนั้นอินพุตมี 3 ค่าแทน 2 อย่างไรก็ตามจำนวนค่าอินพุตอาจแตกต่างจาก 1 ถึง n ตัวอย่าง: อินพุต: ตารางที่มีค่าในหนึ่งคอลัมน์ในหลายแถว Value (nvarchar(500)) ------ Ann John Mark เอาท์พุท # 1: ตารางที่มีค่าต่อกันในหนึ่งคอลัมน์ Ann John Mark Ann,John John,Mark Ann,Mark Ann,John,Mark

1
จะเชื่อมต่อกับฐานข้อมูล PostgreSQL ระยะไกลบน Ubuntu โดยใช้ pgAdmin3 ได้อย่างไร
ฉันพยายามตั้งค่าฐานข้อมูล PostgreSQL บนเครื่อง Ubuntu ฉันต้องการเข้าถึงโดยใช้ pgAdmin3 จากเครื่องระยะไกล ฉันจะตั้งค่านี้ได้อย่างไร ฉันได้ติดตั้งฐานข้อมูล PostgreSQL บน Ubuntu โดยใช้: sudo apt-get install postgresql ในฉัน/etc/postgresql/9.1/main/pg_hba.confมีฉันบรรทัดนี้: host all all all password ดังนั้นจึงควรยอมรับการเชื่อมต่อจากที่อยู่ IPv4 และรหัสผ่านทั้งหมดควรส่งเป็นข้อความที่ชัดเจน (นี่คือเหตุผลการพัฒนา) ถ้าฉันใช้คำสั่งนี้เพื่อดูว่าบริการใดกำลังทำงานอยู่: sudo netstat -tulpn ฉันเห็นบรรทัดเหล่านี้ซึ่งแสดงว่า PostgreSQL ยอมรับการเชื่อมต่อบนพอร์ตเริ่มต้น: tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3561/postgres เมื่อฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ PostgreSQL นี้จากคอมพิวเตอร์ระยะไกลในเครือข่ายท้องถิ่นเดียวกันฉันได้รับข้อความแสดงข้อผิดพลาดนี้: เซิร์ฟเวอร์ไม่ฟัง เซิร์ฟเวอร์ไม่ยอมรับการเชื่อมต่อ: รายงานไลบรารีการเชื่อมต่อ ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: การเชื่อมต่อถูกปฏิเสธเซิร์ฟเวอร์ทำงานบนโฮสต์ "10.0.1.7" …

3
ค่าใช้จ่ายในการตรวจสอบแคชแบบสอบถามบ่อยครั้งคุ้มค่าหรือไม่
ขณะนี้ฉันกำลังทำงานกับฐานข้อมูล MySQL ที่เราเห็นการตรวจสอบความถูกต้องจำนวนมากจากแคชแบบสอบถามเป็นหลักเนื่องจากคำสั่ง INSERT, DELETE และ UPDATE จำนวนมากที่ถูกเรียกใช้งานในหลาย ๆ ตาราง สิ่งที่ฉันพยายามตรวจสอบคือการมีประโยชน์ใด ๆ หรือไม่ที่จะอนุญาตให้ใช้แคชแบบสอบถามสำหรับคำสั่ง SELECT ที่กำลังเรียกใช้กับตารางเหล่านี้ เนื่องจากพวกเขาได้รับการทำให้ใช้งานไม่ได้อย่างรวดเร็วดูเหมือนว่าสิ่งที่ดีที่สุดคือการใช้ SQL_NO_CACHE ในคำสั่ง SELECT ด้วยตารางเหล่านี้ ค่าใช้จ่ายในการตรวจสอบความถูกต้องบ่อยครั้งเป็นสิ่งที่คุ้มค่าหรือไม่? แก้ไข: ตามคำขอของผู้ใช้ @RolandoMySQLDBA ด้านล่างนี่คือข้อมูลเกี่ยวกับ MyISAM และ INNODB InnoDB ขนาดข้อมูล: 177.414 GB ขนาดดัชนี: 114.792 GB ขนาดโต๊ะ: 292.205 GB MyISAM ขนาดข้อมูล: 379.762 GB ขนาดดัชนี: 80.681 GB ขนาดโต๊ะ: 460.443 GB ข้อมูลเพิ่มเติม: เวอร์ชัน: …

2
วิธีการตั้งค่าฐานข้อมูล Postgresql เพื่อดูวันที่เป็น "MDY" อย่างถาวร
ฉันจะตั้งค่าฐานข้อมูลของฉันเพื่อดู 'วันที่' เป็น "MDY" โดยไม่ต้องทำงานได้อย่างไร: SET datestyle = "ISO, MDY"; ทุกครั้งที่ฉันพยายามเข้าถึง ฉันใช้ Postgresql รุ่น 9.1, Ubuntu 12.04 ตำแหน่งที่ตั้งของระบบของฉันในเวลาของการติดตั้งฐานข้อมูลถูกกำหนดให้en_CA.utf8และเมื่อเร็ว ๆ en_US.utf8นี้ผมเปลี่ยนไป show lc_CTYPE ผลตอบแทน: -> "en_CA.UTF-8" แต่ show LC_CoLLATE ผลตอบแทน: -> "en_CA.UTF-8"

4
รวมคำสั่ง deadlocking ตัวเอง
ฉันมีขั้นตอนดังต่อไปนี้ (SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId …

2
ความแตกต่างของประสิทธิภาพระหว่างดัชนีแบบคลัสเตอร์และแบบไม่ทำดัชนี
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ผมอ่านและClusteredNon Clustered Indexes Clustered Index- มันมีหน้าข้อมูล นั่นหมายถึงข้อมูลแถวที่สมบูรณ์จะแสดงในคอลัมน์ดัชนีแบบกลุ่ม Non Clustered Index- มีเฉพาะข้อมูลตัวระบุแถวในรูปแบบของคอลัมน์ดัชนีแบบคลัสเตอร์ (ถ้าไม่มีข้อมูล) หรือตัวระบุไฟล์ + หมายเลขหน้า + จำนวนแถวทั้งหมดในหน้า ซึ่งหมายความว่าเคียวรีเครื่องมือต้องใช้ขั้นตอนเพิ่มเติมเพื่อค้นหาข้อมูลจริง ข้อความค้นหา - ฉันจะตรวจสอบความแตกต่างด้านประสิทธิภาพด้วยความช่วยเหลือของตัวอย่างที่ใช้งานจริงได้อย่างไรเนื่องจากเรารู้ว่าตารางสามารถมีได้เพียงรายการเดียวClustered Indexและจัดเตรียมsortingที่Clustered Index ColumnและNon Clustered Indexไม่ได้ให้บริการsortingและสามารถรองรับ 999 Non Clustered IndexesในSQL Server 2008และ 249 นิ้วSQL Server 2005ได้

2
Percona กับ MySQL
Percona คืออะไร มันแตกต่างจาก MySQL อย่างไร เมื่อใดที่เราควรพิจารณาเปลี่ยน (หรืออัปเกรด) จากสต็อก MySQL เป็น Percona เพื่อเพิ่มข้อ จำกัด บางอย่างในสถานการณ์ของเราเราเกือบจะใช้ InnoDB (ซึ่งฉันเข้าใจว่า Percona ได้ทำการปรับให้เหมาะสมมากที่สุด) ด้วยข้อ จำกัด คีย์ต่างประเทศที่กว้างขวางและขั้นตอนการจัดเก็บบางอย่าง สิ่งที่เรากำลังค้นหาอยู่ในปัจจุบันคือ MySQL นั้นทำการปรับแต่งข้อความค้นหาของเราอย่างไม่เหมาะสมดังนั้นแบบสอบถามใดก็ตามที่มีส่วนร่วมเกิน 3-4 รายการเราต้องสร้างอย่างชัดเจนด้วย STRAIGHT joins เพื่อปรับปรุงประสิทธิภาพ

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