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

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

1
มีความแตกต่างระหว่างการให้สิทธิ์ผู้ใช้ SELECT กับการเพิ่มผู้ใช้ในบทบาท db_datareader หรือไม่?
ฉันถูกขอให้ทุนSELECT, INSERTและUPDATEไปยังผู้ใช้ที่กำหนดสำหรับตารางทั้งหมดในฐานข้อมูล ฉันสิ้นสุดการเพิ่มผู้ใช้db_datareaderและอนุญาตพวกเขาINSERTและUPDATEในระดับฐานข้อมูล แต่นั่นทำให้ฉันคิดว่าอะไรคือความแตกต่าง (ถ้ามี) ระหว่างการให้SELECTสิทธิ์ผู้ใช้ในระดับฐานข้อมูลหรือเพิ่มเข้าไปในdb_datareaderบทบาท และมีวิธีปฏิบัติที่ดีที่สุดในทางใดทางหนึ่งหรือไม่?

1
การติดตามการเปลี่ยนแปลงเปลี่ยนจาก SQL Server 2008 เป็น 2012 หรือไม่
ในปัญหาในการถ่ายภาพปัญหากับการซิงโครไนซ์อุปกรณ์ที่ไม่เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลกลางเรากำลังประสบปัญหาหลังจากอัปเกรดเป็น SQL Server 2012 บนเซิร์ฟเวอร์ ดูเหมือนว่า CHANGE_TRACKING_MIN_VALID_VERSION จะส่งคืนค่าที่สูงกว่าที่ควร 1 (หรืออย่างน้อยก็กว่าที่เคยเป็นมาก่อนการอัพเกรด) ฉันทำงานผ่านตัวอย่างที่ยอดเยี่ยมของ Arshad Ali ถึงวิธีการตั้งค่าตัวอย่างง่ายๆ ฉันเรียกใช้สคริปต์จาก # 1 ถึง # 5 เพื่อแทรกลบและอัปเดตแถวในตารางพนักงานในทั้งสภาพแวดล้อมของ SQL Server 2008 และ 2012 ในปี 2008 คำสั่งต่อไปนี้จะคืนค่า 0: SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee')) ในปี 2012 จะส่งคืน 1 ในการทำงานกับสคริปต์อีกสองสาม (6-8) ในการทดสอบฉันตั้งระยะเวลาการเก็บข้อมูลเป็น 1 นาทีเพื่อหวังว่าจะบังคับให้มีการดำเนินการล้างข้อมูล ฉันออกไปทั้งวันและเห็นได้ชัดว่ามันวิ่งข้ามคืน ในอินสแตนซ์ปี 2008 CHANGE_TRACKING_CURRENT_VERSION และ CHANGE_TRACKING_MIN_VALID_VERSION มีค่าเท่ากับ (11) ในอินสแตนซ์ …

1
ไม่สามารถเปลี่ยนชื่อบริการสำหรับ Oracle
ฉันพยายามเปลี่ยนชื่อบริการของการติดตั้ง Oracle 11.2.0.3 บนเซิร์ฟเวอร์ Windows 2003 ระหว่างการติดตั้งชื่อบริการถูกกำหนดด้วยโดเมนเริ่มต้น แต่เราต้องการกำจัดสิ่งนั้น สิ่งที่ฉันได้ทำไปแล้ว (และสิ่งที่เคยทำมาก่อน) เพื่อเปลี่ยนชื่อบริการmydb.foo.barเป็นmydbเท่านั้น: alter system set service_names = 'mydb' scope = both; alter database rename global_name to mydb; ซึ่งดูเหมือนว่าจะได้ทำงาน: SQL> แสดงชื่อพารามิเตอร์ NAME ประเภทค่า ------------------------------------ ----------- --- --------------------------- db_name สตริง mydb db_unique_name สตริง mydb global_names บูลีน FALSE instance_name สตริง mydb service_names สตริง mydb …

1
mongodb config servers ไม่ได้ซิงค์กัน
ฉันมีการตั้งค่าด้วย 2 เศษด้วย 2 เซิร์ฟเวอร์จำลองและ 3 เซิร์ฟเวอร์กำหนดค่าและ 2 Mongo ฉันมีปัญหาดังต่อไปนี้: 1) เซิร์ฟเวอร์การกำหนดค่า mongo ไม่ซิงค์กัน: Aug 14 09:46:48 server mongos.27017[10143]: Sun Aug 11 09:46:48.987 [CheckConfigServers] ERROR: config servers not in sync! config servers mongocfg1.testing.com:27000 and mongocfg3.testing.com:27000 differ#012chunks: "d2c08c5f1ee6048e5f6fab30e37a70f0"#011chunks: "7e643e9402ba90567ddc9388c2abdb8a"#012databases: "6f35ec52b536eee608d5bc706a72ec1e"#011databases: "6f35ec52b536eee608d5bc706a72ec1e" 2) ฉันใช้เอกสารนี้เพื่อซิงค์เซิร์ฟเวอร์: http://docs.mongodb.org/manual/tutorial/replace-config-server/ 3) หลังจากซิงค์ฉันรีสตาร์ทเซิร์ฟเวอร์ mongos หนึ่งเซิร์ฟเวอร์และดูสิ่งนี้ในบันทึก: Thu Aug 15 …
9 mongodb 

4
ข้อผิดพลาด MYSQL 2049 (HY000): การเชื่อมต่อที่ใช้โพรโทคอลการรับรองความถูกต้องเก่า (ก่อน 4.1.1) ที่ใช้ (ตัวเลือกไคลเอนต์ 'เปิดใช้งาน' secure_auth ')
เมื่อฉันพยายามกู้คืนดัมพ์ฐานข้อมูลทั้งหมดซึ่งอยู่ในเวอร์ชัน 5.0 ถึง 5.6 เวอร์ชันมันได้รับการกู้คืนและหลังจากนั้นเมื่อฉันพยายามเชื่อมต่อใหม่ฉันได้รับข้อผิดพลาดต่อไปนี้ ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol ref used (client option 'secure_auth' enabled).. ฉันได้ลองเพิ่มบรรทัดต่อไปนี้ใน My.ini และเริ่มบริการใหม่ แต่ปัญหายังคงอยู่จนถึง skip-grant-tables ลิงก์ต่อไปนี้ระบุว่าเป็นข้อบกพร่องใน MYSQL https://github.com/santisaez/powerstack/blob/master/packages/mysql/mysql-powerstack-secure_auth.patch ใครบ้างมีการแก้ไขสำหรับวิธีนี้

2
ฉันจะตรวจสอบได้อย่างไรว่าคอลัมน์ถูกกำหนดให้เป็นชนิดข้อมูลอนุกรมแทนที่จะเป็นจำนวนเต็มตามแค็ตตาล็อกหรือไม่
ดังนั้นตอนนี้ฉันกำลังสร้าง SQL เพื่ออ่านแค็ตตาล็อก postgres (9.1) เพื่อสร้างคำจำกัดความของตาราง อย่างไรก็ตามฉันพบปัญหากับชนิดข้อมูล SERIAL / BIGSERIAL ตัวอย่าง: CREATE TABLE cruft.temp ( id BIGSERIAL PRIMARY KEY ); SELECT * FROM information_schema.columns WHERE table_schema='cruft' AND table_name='temp'; "db","cruft","temp","id",1,"nextval('cruft.temp_id_seq'::regclass)","NO","bigint",,,64,2,0,,,,,,,,,,,,,"db","pg_catalog","int8",,,,,"1","NO","NO",,,,,,,"NEVER",,"YES" มันทำให้ฉันชื่อฐานข้อมูล (db), ชื่อ schema (cruft), ชื่อตาราง (temp), ชื่อคอลัมน์ (id), ค่าเริ่มต้น (nextval (... )), และชนิดข้อมูล (bigint และ int8 .. ไม่ใหญ่มาก) ... ฉันรู้ว่าฉันสามารถตรวจสอบเพื่อดูว่าค่าเริ่มต้นเป็นลำดับ …

2
วิธีที่มีประสิทธิภาพที่สุดในการบีบอัดและจัดเก็บข้อมูลสำรอง SQL Server คืออะไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันทำการทดสอบวิธีต่างๆในการบีบอัดและจัดเก็บข้อมูลสำรอง SQL Server (โดยใช้รุ่น SQL Server 2008 R2 Enterprise) และฉันสงสัยว่าอัลกอริทึมการบีบอัดที่มีประสิทธิภาพมากที่สุดคืออะไรสำหรับการจัดเก็บสำรองข้อมูลระยะยาวนอก SQL อัลกอริทึมการบีบอัดภายใน ฉันไม่กังวลเกี่ยวกับที่เก็บข้อมูลจริงหรือเทปไดรฟ์หรืออะไรก็ตามเพียงแค่พยายามเปลี่ยนข้อมูลขนาด 3TB ของเราและล็อกไฟล์ให้เป็นไฟล์เดียวที่เล็กที่สุดที่ฉันสามารถทำได้ เช่นยกตัวอย่างเช่น. zip หรือ. 7z หรือมีตัวแปรมากเกินไปในฐานข้อมูลของฉันเพื่อให้สามารถประมาณการได้อย่างแม่นยำว่าอะไรจะมีประสิทธิภาพมากที่สุดและฉันจะต้องทำการทดสอบบางอย่าง? หรือการบีบอัดภายในของ SQL Server เป็นสิ่งที่ดีที่สุดที่ฉันจะได้รับ

2
เปิดใช้งานการติดตามเริ่มต้น แต่ไม่ทำงาน
เมื่อฉันสอบถามการกำหนดค่าของการติดตามเริ่มต้นมันจะเปิดใช้งาน: exec sp_configure 'default trace enabled'; --> name minimum maximum config_value run_value default trace enabled 0 1 1 1 แต่เมื่อฉันค้นหาsys.tracesพา ธ มันจะส่งคืน rowset ที่ว่างเปล่า: select * from sys.traces; สิ่งใดที่สามารถอธิบายได้ว่าไม่มีร่องรอยการเปิดใช้งาน

1
SqlPackage ไม่รับตัวแปรจากโปรไฟล์
ฉันต้องการอัพเกรดฐานข้อมูลโดยใช้. dacpac และ sqlpackage.exe นี่คือวิธีที่ฉันเรียกใช้ sqlpackage: SqlPackage.exe /Action:Publish /SourceFile:"my.dacpac" /Profile:"myprofile.publish.xml" ข้อผิดพลาดที่ฉันได้รับคือ: *ตัวแปร SqlCmd ต่อไปนี้ไม่ได้ถูกกำหนดไว้ในสคริปต์เป้าหมาย: foo ฉันตรวจสอบแล้วว่าไฟล์ myprofile.publish.xml มี var นั้น: <ItemGroup> <SqlCmdVariable Include="foo"> <Value>bc\local</Value> </SqlCmdVariable> ฉันยังตรวจสอบว่าโครงการที่สร้าง dacpac นั้นเผยแพร่ได้สำเร็จจากภายใน visual studio โดยใช้ myprofile.publish.xml มีอะไรอีกบ้างที่ฉันขาดหายไป? (ฉันใช้ SQL Server 2012)

1
IO_STALL คำถามและความเข้าใจ
ฉันกำลังรวบรวม IO_STALLS จาก sys.dm_io_virtual_file_stats ทุก ๆ 5 นาทีจากนั้นทำเดลต้าเพื่อดูว่าไฟล์ใดบ้างที่ได้รับผลกระทบมากที่สุดจาก IO ในระยะเวลาหนึ่ง 5 นาทีฉันจะได้เดลต้าของ 5826331 ms ซึ่งเป็น 97 นาที ฉันสับสนเล็กน้อยในเรื่องนี้นี่เป็นการบอกว่าการผ่าตัดเริ่มต้นแล้ว 97 นาทีที่แล้วเพิ่งจะเสร็จที่จุดนั้นและด้วยเหตุนี้จึงบันทึกเวลารอคอยหรือไม่ ขอบคุณ เพิ่มรหัสตามที่ร้องขอ: /* USE [SysDBA] GO */ /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* DROP TABLE [dbo].[DISKIOPS] GO */ --Create the table /****** Object: Table [dbo].[DISKIOPS] Script …

2
การจำลองแบบ MySQL: 'รายการซ้ำสำหรับคีย์หลัก'
คุณกรุณาช่วยฉันเข้าใจว่าทำไมฉันถึงได้รับ 'รายการซ้ำสำหรับคีย์หลัก' บนเซิร์ฟเวอร์ทาสหลังจากทำการซิงค์ใหม่ทั้งหมด โดยทั่วไป 'mysqldump' ทำงานเกือบทั้งคืนแล้วกระบวนการกู้คืนใช้เวลาสองสามชั่วโมงดังนั้นเมื่อฉันเริ่มใช้งานทาสมันคือ ~ 63874 วินาทีที่อยู่เบื้องหลังเจ้านาย เซิร์ฟเวอร์ทาสเป็นแบบอ่านอย่างเดียว (read_only) และไม่มีการเขียนใด ๆ ระหว่างกระบวนการซิงค์ใหม่ดังนั้นฉันจึงไม่เข้าใจว่าเพราะเหตุใดจึงมีคีย์ซ้ำ รูปแบบบันทึกไบนารีตั้งค่าเป็น MIXED บนต้นแบบ คำสั่งที่ใช้ในการสำรองฐานข้อมูล: mysqldump --opt --single-transaction -Q --master-data=2 db | bzip2 -cz > db.sql.bz2 Slave จะจำลองฐานข้อมูลเดียวเท่านั้นจากต้นแบบ (db -> db_backup) ด้วยตัวเลือกต่อไปนี้: replicate-wild-do-table = db_backup.% replicate-rewrite-db = db->db_backup

3
การจัดการกับช่วงข้อมูลเฉพาะตัวสำหรับการจำลองแบบของทรานแซคชัน
ฉันสังเกตเห็นว่าเมื่อคุณตั้งค่าการจำลองแบบของทรานแซคชัน SQL Server จะตั้งค่าการจัดการช่วงข้อมูลประจำตัวเป็นคู่มือ สิ่งนี้หมายความว่าในฐานข้อมูลการสมัครสมาชิกของฉันเมื่อฉันพยายามที่จะแทรกระเบียนใหม่ลงในตารางที่มี PK เป็นคอลัมน์ข้อมูลประจำตัวมันจะทำให้ฉันมีข้อผิดพลาดและบอกว่ามันพยายามแทรก PK ของ "1", "2 "," 3 "ฯลฯ นี่เป็นเพราะค่าข้อมูลประจำตัวปัจจุบันสำหรับคอลัมน์ข้อมูลประจำตัวทั้งหมดของผู้สมัครสมาชิกจะได้รับการรีเซ็ตเป็นค่าเริ่มต้น (ปกติ 1) แทนที่จะอยู่ในสิ่งที่เป็นอยู่ของผู้เผยแพร่ ฉันเข้าใจว่าทำไม SQL Server ถึงทำเช่นนี้คุณควรปล่อยให้ตารางสมาชิกเป็นแบบอ่านอย่างเดียว อย่างไรก็ตามสถานการณ์ของฉันเป็นเรื่องแปลกนอกรีต - ฉันอัปเดตสมาชิกของฉันเป็นระยะ ๆ ผ่านการจำลองแบบทำการสำรองข้อมูลทันทีของฐานข้อมูลนั้นจากนั้นฉันต้องการทำการอัปเดตบางอย่างสำหรับผู้สมัครสมาชิกที่จะไม่ถูกผลักกลับไปยังผู้เผยแพร่ เมื่อฉันไปอัปเดตผู้สมัครสมาชิกอีกครั้งฉันจะคืนค่าฐานข้อมูลจากการสำรองข้อมูลก่อนหน้าและดึงการอัปเดตล่าสุด เนื่องจากฉันต้องการอัพเดตผู้สมัครสมาชิกระหว่างการอัพเดตเหล่านี้ ('deltas ชั่วคราว' ถ้าคุณต้องการ) ฉันต้องการคอลัมน์ข้อมูลประจำตัวในการทำงานและไม่รีเซ็ตเป็น 1 เมื่อทำซ้ำ ฉันพยายามเปิดการจัดการช่วงข้อมูลเฉพาะตัวอัตโนมัติเมื่อตั้งค่าสิ่งพิมพ์ของฉัน แต่นั่นทำให้ฉันเกิดข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเพิ่มตารางลงในสิ่งพิมพ์: ข่าวสารเกี่ยวกับ 21231, ระดับ 16, สถานะ 1, กระบวนงาน sp_MSrepl_addarticle, บรรทัด 2243 การสนับสนุนช่วงข้อมูลเฉพาะตัวอัตโนมัติมีประโยชน์สำหรับสิ่งพิมพ์ที่อนุญาตให้มีการอัพเดตผู้สมัครสมาชิกเท่านั้น มีวิธีใดบ้างที่ฉันสามารถแก้ไขปัญหานี้ได้ ฉันต้องการนำเสนอการจำลองแบบนี้ไปยัง …

2
ฟังก์ชั่นแฮงค์กับการดำเนินการกรณีที่ไม่มี
ฉันสร้างฟังก์ชั่นที่ยอมรับวันที่เริ่มต้นและสิ้นสุดโดยมีวันที่สิ้นสุดเป็นตัวเลือก จากนั้นฉันเขียนCASEตัวกรองเพื่อใช้วันที่เริ่มต้นหากไม่มีวันที่สิ้นสุด CASE WHEN @dateEnd IS NULL THEN @dateStart ELSE @dateEnd END เมื่อฉันเรียกใช้ฟังก์ชันสำหรับเดือนล่าสุดของข้อมูล: SELECT * FROM theFunction ('2013-06-01', NULL) ... แบบสอบถามหยุดทำงาน ถ้าฉันระบุวันที่สิ้นสุด: SELECT * FROM theFunction ('2013-06-01', '2013-06-01') ... ผลลัพธ์จะถูกส่งคืนตามปกติ ฉันเอารหัสออกจากฟังก์ชั่นและวิ่งได้ดีในหน้าต่างแบบสอบถาม ฉันไม่สามารถทำซ้ำปัญหาซอทั้ง แบบสอบถามที่ชอบ: SELECT * FROM theFunction ('2013-04-01', '2013-06-01') ... ยังใช้งานได้ดี มีอะไรในแบบสอบถาม (ด้านล่าง) ที่อาจทำให้ฟังก์ชันหยุดทำงานเมื่อมีการNULLส่งผ่านสำหรับวันที่สิ้นสุดหรือไม่ ซอ Fiddle แผนการดำเนินการสำหรับSELECT * FROM theFunction …

2
สร้างบทบาทฐานข้อมูลเพื่ออนุญาตการเข้าถึงการอ่านไปยังตารางทั้งหมด เข้าถึงการเขียนบางอย่าง
เรามีฐานข้อมูลที่มีมากกว่า 1,000 ตาราง ฉันต้องสร้างบทบาทที่อนุญาตให้อ่านได้อย่างเดียวบนทุกตารางรวมถึงการเขียนเพื่อเข้าถึงสองตารางที่เฉพาะเจาะจง ฉันยุ่งกับบทบาทฐานข้อมูล แต่เมื่อใดก็ตามที่ฉันไปเพิ่มตารางฉันต้องเลือกทั้งหมด 1,000 ... มีวิธีที่ดีกว่าในการทำเช่นนี้?

1
DBCC Shrinkfile ลักษณะการทำงานที่แปลก
ฉันพยายามเรียกใช้ dbcc shrinkfile ในหน่วยความจำ 1GB เทียบกับฐานข้อมูลที่ 95% ของข้อมูลถูกเก็บถาวรและลบ ฉันเลื่อนไฟล์ 235GB โดยที่ 9GB เป็นข้อมูล / ดัชนี ฉันต้องการลดขนาดลงเหลือ 50GB ฉันรู้ว่าไฟล์ฐานข้อมูลที่ลดขนาดไม่ดีก็ทำให้เกิดการแตกหัก ฯลฯ เป็นส่วนหนึ่งของการล้างข้อมูล / หดตัวเรายังมีสคริปต์ idnex สร้างใหม่ เมื่อฉันรันสคริปต์ dbcc shrinkfile กับฐานข้อมูลบนเวิร์กสเตชันของฉันเอง (quad core, RAM 12GB, ไดรฟ์ SATA 2 เท่า) การลดขนาดใช้เวลาประมาณ 8-10 นาที เมื่อรันโค้ดที่เหมือนกันกับสำเนาที่เหมือนกันของการล้างข้อมูลที่ทำการโพสต์ฐานข้อมูลใน envrionment การทดสอบของเรา (80+ คอร์, 128GB RAM, SSD SAN) ใช้เวลา 70 …

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