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

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

1
บทบาท db_owner อนุญาตอะไร
ฉันพยายามแก้ไขปัญหาการเข้าสู่ระบบที่ไม่สามารถดูตารางบางอย่างในฐานข้อมูล SQL Server 2012 ในการทำเช่นนั้นฉันพบว่าฉันไม่ค่อยเข้าใจในการเป็นสมาชิกในdb_ownerบทบาทที่อนุญาต ฉันสามารถเข้าใจบทบาทอื่น ๆ เช่นdb_datareader and db_datawriterแต่ฉันยังคงสับสนกับสิ่งที่db_ownerอนุญาต

1
การแก้ไขโครงสร้างตารางเพื่อหลีกเลี่ยง `ข้อผิดพลาด: ค่าคีย์ที่ซ้ำกันละเมิดข้อ จำกัด ที่ไม่ซ้ำกัน '
ฉันมีตารางที่สร้างขึ้นด้วยวิธีนี้: -- -- Table: #__content -- CREATE TABLE "jos_content" ( "id" serial NOT NULL, "asset_id" bigint DEFAULT 0 NOT NULL, ... "xreference" varchar(50) DEFAULT '' NOT NULL, PRIMARY KEY ("id") ); ต่อมาบางแถวจะถูกแทรกโดยระบุรหัส: INSERT INTO "jos_content" VALUES (1,36,'About',...) ที่จุดภายหลังบางระเบียนจะถูกแทรกโดยไม่ต้อง ID Error: duplicate key value violates unique constraintและพวกเขาล้มเหลวกับข้อผิดพลาด: เห็นได้ชัดว่า id ได้รับการกำหนดเป็นลำดับ: การแทรกที่ล้มเหลวแต่ละครั้งจะเพิ่มตัวชี้ในลำดับจนกระทั่งมันเพิ่มขึ้นเป็นค่าที่ไม่มีอยู่อีกต่อไปและการสืบค้นสำเร็จ …

2
วิธีการกำหนดแบบสอบถาม MySQL ต่อวัน?
ฉันกำลังตรวจสอบสวิตช์ขนาดใหญ่จาก MySQL เป็น NoSQL DBaaS และฉันพบปัญหาในการพยายามคาดการณ์ค่าใช้จ่าย โดยพื้นฐานแล้วฉันไม่สามารถค้นหาจำนวนเซิร์ฟเวอร์ MySQL ปัจจุบันที่ฉันจัดการต่อวันเพื่อลองและประเมินจำนวนคำขอที่ฉันจะใช้กับCloudantซึ่งคิดค่าบริการ $ 0.015 ต่อ 100 PUTs , POSTsและDELETEsและ $ 0.015 ต่อ 500 GETs และหัว ฉันพบข้อมูลจำนวนมากเกี่ยวกับการใช้สถานะ SHOWและSHOW GLOBAL STATUSเพื่อรับสถิติที่ MySQL รวบรวมไว้ในตัวของมันเอง แต่ไม่มีการอ้างอิงกรอบเวลา ตัวอย่างเช่น SHOW GLOBAL STATUS ส่งคืนค่าต่อไปนี้: Queries | 13576675 เป็นสิ่งที่ดีมากยกเว้นฉันไม่รู้ว่ากรอบเวลาที่ตัดจำนวนนั้น 13 ล้านคำค้นหาเมื่อไหร่? ต่อเดือน? ปี? ตั้งแต่จุดเริ่มต้นของเวลา? เอกสาร MySQL ไม่ได้อธิบายรายละเอียดมากเกินไป: แบบสอบถาม จำนวนงบที่ดำเนินการโดยเซิร์ฟเวอร์ ตัวแปรนี้รวมคำสั่งที่เรียกใช้ภายในโปรแกรมที่เก็บไว้ซึ่งแตกต่างจากตัวแปรคำถาม มันไม่นับคำสั่ง …
15 mysql 

1
กู้คืนฐานข้อมูล MySQL จากโฟลเดอร์ข้อมูลโดยไม่มี ibdata1 จากไฟล์ ibd
ไดเรกทอรี WAMP ของฉันถูกลบโดยผู้ใช้รายอื่นโดยไม่ตั้งใจ มีโฟลเดอร์ข้อมูลเฉพาะใน MySQL เท่านั้น และในโฟลเดอร์ฐานข้อมูลเท่านั้น (โฟลเดอร์ใน "\ bin \ mysql \ mysql5.6.12 \ data \" ที่มีชื่อฐานข้อมูล) จะพร้อมใช้งาน ไฟล์ทั้งหมดรวมถึง " ibdata1 " ที่อยู่ในรูทของ "\ bin \ mysql \ mysql5.6.12 \ data \" จะถูกลบเช่นกัน โฟลเดอร์ฐานข้อมูลมีไฟล์ที่มีนามสกุลด้านล่างเท่านั้น * .frm, * .ibd และไฟล์ "db.opt" วิธีการกู้คืนฐานข้อมูล ฉันได้ลองกู้ bdata1 แล้ว แต่ไม่สามารถรับกลับคืนมาได้ และบางฐานข้อมูลก็มี MYISAM ด้วย

3
สร้าง UNIQUEIDENTIFIER อย่างปลอดภัยใน SQL Server
ฉันตั้งใจจะใช้UNIQUEIDENTIFIERเป็นคีย์การเข้าถึงที่ผู้ใช้สามารถใช้เพื่อเข้าถึงข้อมูลบางอย่าง กุญแจจะทำหน้าที่เป็นรหัสผ่านในแง่นั้น ฉันจำเป็นต้องสร้างตัวระบุหลายตัวเป็นส่วนหนึ่งของINSERT...SELECTคำสั่ง ด้วยเหตุผลทางสถาปัตยกรรมฉันต้องการสร้างตัวระบุฝั่งเซิร์ฟเวอร์ในกรณีนี้ ฉันจะสร้างแบบสุ่มที่ปลอดภัยได้UNIQUEIDENTIFIERอย่างไร โปรดทราบว่าNEWIDจะไม่สามารถสุ่มได้มากพอเนื่องจากไม่ได้รับประกันคุณสมบัติความปลอดภัยใด ๆ เลย ฉันกำลังมองหา SQL Server ที่เทียบเท่ากับSystem.Security.Cryptography.RandomNumberGeneratorเพราะฉันต้องการ ID ที่ไม่สามารถคาดเดาได้ สิ่งใดขึ้นอยู่กับCHECKSUM, RANDหรือGETUTCDATEยังจะได้มีสิทธิ์

2
เหตุใดจึงตัด DDL
ฉันมีคำถามสัมภาษณ์ซึ่งถูกถามระหว่างการสัมภาษณ์ ฉันตอบคำถาม แต่ผู้สัมภาษณ์ไม่เชื่อมั่นกับคำตอบของฉัน ดังนั้นทุกคนโปรดแก้ไขฉันด้วยความเข้าใจของฉัน Q. ทำไม Truncate เป็น DDL ที่ไหนในขณะที่ Delete เป็น DML ทั้งสองทำงานเกือบเหมือนกัน (ลบแถว) Ans เมื่อเราใช้ Truncate เราจะยกเลิกการจัดสรรพื้นที่ทั้งหมดที่จัดสรรโดยข้อมูลโดยไม่บันทึกลงใน undo-table-space แต่ในกรณีของการลบเราจะใส่ข้อมูลทั้งหมดในเลิกทำพื้นที่ตารางแล้วเราจะลบข้อมูลทั้งหมด กรุณาถ้าใครรู้คำตอบที่ดีที่สุดสำหรับข้างต้นโปรดอธิบาย
15 oracle  delete  ddl  truncate 

2
ส่งออกตาราง Postgres ระยะไกลไปยังไฟล์ CSV บนเครื่องท้องถิ่น
ฉันเข้าถึงฐานข้อมูลบนเซิร์ฟเวอร์ระยะไกลแบบอ่านอย่างเดียว ดังนั้นฉันสามารถรัน: COPY products TO '/tmp/products.csv' DELIMITER ','; แต่บนเซิร์ฟเวอร์นั้นฉันไม่มีสิทธิ์สร้าง / บันทึกไฟล์ดังนั้นฉันต้องทำสิ่งนี้กับเครื่องของฉัน เมื่อฉันเชื่อมต่อกับฐานข้อมูลระยะไกลฉันจะรันคำสั่งเพื่อบันทึกไฟล์บนเครื่องท้องถิ่นของฉันแทนที่จะเป็นเซิร์ฟเวอร์ระยะไกลได้อย่างไร หรือฉันจะรันคำสั่ง Linux เพื่อเชื่อมต่อกับฐานข้อมูลระยะไกลดำเนินการค้นหาและบันทึกผลลัพธ์เป็นไฟล์ไปยังเครื่องท้องถิ่นของฉันได้อย่างไร
15 postgresql  export  csv  copy 

1
อะไรคือไฟล์ iblog ใน mysql
ฉันต้องการที่จะเข้าใจไฟล์ ibdata เหล่านี้เพราะสิ่งเหล่านี้มีบทบาทสำคัญในกระบวนการกู้คืนความผิดพลาด ฉันไม่สามารถหาแหล่งข้อมูลที่เหมาะสมผ่านเว็บสำหรับเรื่องนี้
15 mysql  innodb  logs 

1
จะใช้การเข้ารหัส aes ใน PostgreSQL ได้อย่างไร
ฉันลองเข้ารหัส aes โดยใช้ข้อความต่อไปนี้: SELECT encrypt('test', 'key', 'aes'); ซึ่งใช้งานได้ แต่ฉันไม่สามารถถอดรหัสค่าได้ ฉันใส่มันลงในเขตข้อมูลชนิดข้อมูลไบต์แต่ฉันไม่แน่ใจว่าเป็นวิธีที่ถูกต้องหรือไม่ SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1; ทำให้ฉันมีข้อผิดพลาด ข้อผิดพลาด: ถอดรหัสฟังก์ชัน (bytea, ไม่ทราบ, ไม่ทราบ) ไม่มีอยู่ บรรทัดที่ 1: เลือกตัวถอดรหัส (pw, 'key', 'aes') จาก tabelle WHERE ID = 7; ^ คำแนะนำ: ไม่มีฟังก์ชันที่ตรงกับชื่อและประเภทอาร์กิวเมนต์ที่กำหนด คุณอาจจำเป็นต้องเพิ่ม casts ประเภทชัดเจน นั่นหมายความว่าการเข้ารหัส () เป็นฟังก์ชั่นที่มีอยู่ แต่ไม่ถอดรหัส () …

1
อนุญาตให้แทรกจำนวนมากในฐานข้อมูลเดียว
ฉันทำงานกับ บริษัท ที่มีความปลอดภัยด้านไอทีอย่างตรงไปตรงมา ฉันถูกจ้างเป็นนักวิเคราะห์ฐานข้อมูลเพื่อเพิ่มประสิทธิภาพกระบวนการบางอย่างในทีมของเรา ปัญหาคือฉันมีสิทธิ์อ่านและเขียนเท่านั้นและฉันพยายามหาสิทธิ์ขั้นสูงในฐานข้อมูล ขณะนี้เรามีฐานข้อมูลจำนวนมากในเซิร์ฟเวอร์เดียวและเราสามารถทำงานบนฐานข้อมูลเดียวฉันสงสัยว่าการBULK INSERTอนุญาตสามารถมอบให้กับฐานข้อมูลเดียวหรือว่าจะอนุญาตให้เซิร์ฟเวอร์ทั้งหมดหรือไม่ ฉันค้นหาผ่านเว็บเกี่ยวกับเรื่องนี้ แต่ฉันสับสนเล็กน้อย นี่คือสิ่งที่ฉันค้นพบ ในการใช้งาน BULK INSERT ฉันควรได้INSERTรับอนุญาตในตารางหรือฐานข้อมูลที่ต้องการADMINISTER BULK OPERATIONSซึ่งเป็นสิทธิ์ที่ครอบคลุมของเซิร์ฟเวอร์ หากฉันได้รับADMINISTER BULK OPERATIONSอนุญาตในฐานข้อมูลทั้งหมดและการINSERTอนุญาตในฐานข้อมูลเดียวฉันจะไม่สามารถทำได้เฉพาะBULK INSERTในฐานข้อมูลเดียวนั้นเนื่องจากฉันไม่มีINSERTสิทธิ์ในฐานข้อมูลอื่น เป็นไปได้หรือไม่ที่จะ จำกัด การใช้งานBULK INSERTฐานข้อมูลเดียวบนเซิร์ฟเวอร์ที่มีฐานข้อมูลหลายฐาน? ขออภัยเกี่ยวกับกำแพงข้อความและขอขอบคุณ!

2
ทศนิยมของเซิร์ฟเวอร์ SQL (9, 0) กับ INT
หนึ่งในลูกค้าของเราใช้คอลัมน์ประเภทข้อมูลDECIMAL(18,0)ในฐานข้อมูล SQL Server 2008R2 ของเขา เนื่องจากคอลัมน์เติบโตค่อนข้างช้าเขาจึงเสนอให้เปลี่ยนประเภทข้อมูลเป็นDECIMAL(5,0)พื้นที่เก็บข้อมูลบางส่วน ตามไลบรารี MSDNพื้นที่เก็บข้อมูลของDECIMAL(5,0)ประเภทข้อมูลนั้นก็เหมือนกับDECIMAL(9,0)ประเภทข้อมูล 5 ไบต์ INTมีขนาดเล็กกว่า 1 ไบต์ แต่สามารถจัดเก็บทุกอย่างในช่วง -2 ^ 31 ถึง 2 ^ 31 แทน -99,999 ถึง 99,999 ซึ่งDECIMAL(5,0)สามารถจัดเก็บได้ แม้แต่ใหญ่ที่สุดDECIMALซึ่งพอดีกับ 5 ไบต์ ( DECIMAL(9,0)) สามารถเก็บเฉพาะจำนวนเต็มในช่วง -999,999,999 ถึง 999,999,999 (ซึ่งน้อยกว่าครึ่งหนึ่งของช่วงที่INTเสนอใน 4 ไบต์) ฉันนึกถึง "ผลประโยชน์" สองอย่างของการใช้DECIMALเกินINT: ความสามารถในการเพิ่มสเกลในภายหลังโดยไม่ต้องใช้พื้นที่เก็บข้อมูลเพิ่มเติม ความสามารถในการขยายความแม่นยำสูงถึง 38 หลักโดยไม่ต้องเปลี่ยนประเภทข้อมูล แต่นี่ไม่ใช่ประโยชน์ที่แท้จริงในความคิดของฉัน: การเพิ่มสเกลให้กับจำนวนเต็มนั้นเหมาะสมในบางกรณีเท่านั้น (ในกรณีส่วนใหญ่ที่สเกลนั้นสร้างความแตกต่างก็สามารถเพิ่มได้ล่วงหน้า) SQL Server …

2
วิธีสลับฟิลด์บูลีนด้วย sql ใน postgresql ได้อย่างไร
มีเขตข้อมูลshowซึ่งเป็นbooleanประเภทใน postgesql ฉันต้องการเขียน sql เพื่ออัพเดตตารางนั้นเพื่อสลับค่าของการแสดง ถ้ามันtrueจะกลายเป็นfalseถ้ามันมันจะกลายเป็นfalsetrue เป็นไปได้ไหม?
15 postgresql 

1
การตีความ Showplan XML ของ SQL Server
ฉันเพิ่งเปิดตัวฟีเจอร์บนเว็บไซต์ของฉันที่http://sqlfiddle.comซึ่งอนุญาตให้ผู้ใช้ดูแผนปฏิบัติการแบบดิบสำหรับการสืบค้น ในกรณีของ PostgreSQL, MySQL และ (ในระดับหนึ่ง) Oracle การดูผลลัพธ์ของแผนการดำเนินการดิบนั้นสามารถเข้าใจได้ อย่างไรก็ตามหากคุณดูผลลัพธ์ของแผนการดำเนินการสำหรับ SQL Server (สร้างด้วยSET SHOWPLAN_XML ON) จะมี XML จำนวนมหาศาลที่สามารถลุยได้แม้จะเป็นการสืบค้นที่ค่อนข้างง่าย นี่คือตัวอย่าง (นำมาจากแผนการดำเนินการของแบบสอบถามล่าสุดสำหรับ 'ซอ': http://sqlfiddle.com/#!3/1fa93/1 ): <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96"> <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/> …

4
การถ่ายโอนข้อมูล MySQL จากเครื่องอื่น
ฉันมีฐานข้อมูล MySQL บนเครื่อง A และฉันต้องการเข้าถึง mysqldump จากเครื่อง B ทั้งสองเครื่องทำงานบน Linux และฉันก็มีสิทธิของทั้งคู่ แต่ฉันไม่สามารถเข้าถึง mysqldump ได้ ฉันจะลองทำอะไร
15 mysql  mysqldump  linux 

3
ไม่สามารถลบ“ การใช้งาน GRANT”
ฉันกำลังทดสอบบางสิ่งและเพิ่ม: grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; ดังนั้นเมื่อฉันทำ show grants for cptnotsoawesome@localhost; ฉันเห็นว่าหนึ่งในนั้นคือ: Grants for cptnotsoawesome@localhost ---------------------------------- GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' ตอนนี้ฉันต้องการลบออกเพราะฉันคิดว่ามันเป็นอันตรายด้านความปลอดภัยดังนั้นฉันจึง: REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; แต่ก็ยังแสดงให้เห็นว่าการใช้งาน USAGE ในรายการสิทธิ์ Grants for cptnotsoawesome@localhost ---------------------------------- GRANT …

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