ในฐานะ DBA ฉันจะเปลี่ยนจาก Oracle เป็น SQL Server ได้อย่างไร


32

ฉันเป็น Oracle DBA ที่มีประสบการณ์ Sybase ด้วย

อะไรคือความแตกต่างทางสถาปัตยกรรมและแนวคิดที่สำคัญระหว่างสองแพลตฟอร์ม RDBMS?

คำตอบที่คล้ายกับ SQL Server-> คำถาม Oracle ที่นี่จะใช้งานมากที่สุด


3
อารมณ์ขันนิดหน่อย (ขออภัยถ้า OT) คุณเคยเจอบ้างไหม? dba.stackexchange.com/questions/9765/…
booyaa

คำตอบ:


49

ฉันได้สลับไปมาระหว่างการทำงานกับ Oracle และ SQL Server ในช่วงไม่กี่ปีที่ผ่านมาและได้เขียนแจ้งให้ทราบเกี่ยวกับวิธีอื่นที่นี่ มีความแตกต่างเชิงสำนวนและสถาปัตยกรรมจำนวนหนึ่งและคำศัพท์ต่าง ๆ จะถูกนำมาใช้อย่างแตกต่างกันโดยผู้จำหน่ายและชุมชนผู้พัฒนา / ชุมชน DBA รอบ ๆ แต่ละผลิตภัณฑ์

สถาปัตยกรรมทางกายภาพ

SQL Server จัดระเบียบสิ่งต่าง ๆ ให้แตกต่างจาก Oracle เล็กน้อยและมีแนวคิดหลักหนึ่งหรือสองข้อที่ไม่มี analogues โดยตรงใน Oracle

  • A 'ฐานข้อมูล' เป็นรายการแยกต่างหากใน SQL Server ที่มีสิทธิ์ผู้ใช้ของตัวเองพื้นที่สคีมา / ชื่อและการจัดเก็บ หากคุณคุ้นเคยกับ Sybase พวกเขาจะทำงานเหมือนกับฐานข้อมูลใน Sybase เนื่องจากต้นกำเนิดทั่วไปของผลิตภัณฑ์

  • กลุ่มไฟล์จะเทียบเท่ากับพื้นที่ตารางโดยประมาณแม้ว่าจะอยู่ในฐานข้อมูลก็ตาม

  • สคีมาเป็นแนวคิดที่แตกต่างจากผู้ใช้ฐานข้อมูลใน SQL Server แม้ว่าผู้ใช้สามารถมีสคีมาเริ่มต้นได้

  • MVCC ทำงานแตกต่างกันเล็กน้อยใน SQL Server มันเป็นคุณสมบัติที่ค่อนข้างใหม่ล่าสุดรักษาสำเนาที่แตกต่างกันของแถวจนกว่าการล็อคในรุ่นเก่าจะถูกปล่อยออกมา SQL Server ไม่เทียบเท่าโดยตรงกับเซ็กเมนต์ย้อนกลับ มันไม่ได้ใช้งานโดยค่าเริ่มต้นในฐานข้อมูล SQL Server

  • Tempdb มีการใช้งานอย่างหนักมากขึ้นใน SQL Server ระบบใช้สำหรับตารางชั่วคราวและผลการเข้าร่วมระดับกลาง เพิ่มเติมเกี่ยวกับ tempdb ในภายหลัง

  • การแบ่งพาร์ติชั่นของตารางค่อนข้างงอแงกว่า Oracle คุณต้องตั้งค่าฟังก์ชั่นพาร์ติชั่นที่สร้างพาร์ติชั่นคีย์จากสิ่งที่คุณกำลังจะจัดหามันจากนั้นโครงร่างพาร์ติชั่นเหนือฟังก์ชันพาร์ติชั่น ชุดรูปแบบพาร์ติชันทำงานเล็กน้อยเช่นกลุ่มไฟล์ที่คุณสร้างตารางบนชุดรูปแบบพาร์ติชัน

    การสลับพาร์ติชั่นเข้าและออกคุณจะต้องตั้งค่าข้อ จำกัด ในตารางว่างในโครงสร้างที่เหมาะสม ข้อ จำกัด รับประกันว่าค่าคีย์พาร์ติชันเหมาะสมกับพาร์ติชันที่คุณต้องการสลับเข้ามา

  • มุมมอง Materialized เรียกว่ามุมมองที่จัดทำดัชนีใน SQL Server ส่วนGROUP BYคำสั่งที่มีตัวCUBEดำเนินการและเอกสารอ้างอิงถึงคุณลักษณะการเขียนแบบสอบถามใหม่ อย่างไรก็ตามฟังก์ชั่นนี้ไม่ได้รับการบันทึกไว้อย่างดีและอาจไม่สมบูรณ์เต็มที่ YMMV

  • SQL Server ไม่สนับสนุนธุรกรรมที่เป็นอิสระแม้ว่าจะรองรับการมอบหมายสองขั้นตอนผ่านโปรโตคอลธุรกรรม XA หรือ OLEDB

  • ดัชนีแบบกลุ่มนั้นแตกต่างจากตารางที่จัดทำดัชนีใน Oracle เล็กน้อยเนื่องจากไม่ต้องการคอลัมน์ทั้งหมดในตารางเพื่อเข้าร่วมในดัชนีแบบคลัสเตอร์ พวกเขากำลังใช้กันอย่างแพร่หลายในสถาปัตยกรรม SQL Server มากกว่า IOT ที่อยู่ใน Oracle

  • SQL Server รองรับดัชนีครอบคลุม แต่ไม่มีดัชนีเข้าร่วม ไม่รองรับดัชนีบิตแมปแม้ว่าจะมีตัวดำเนินการแยกดัชนี / ดาวที่สามารถคำนวณจุดตัดได้โดยไม่ต้องกดปุ่มตารางข้อเท็จจริง

  • ลำดับเป็นส่วนเสริมล่าสุดของ SQL Server โดยปกติแล้วคีย์การสร้างอัตโนมัติจะทำผ่านคอลัมน์ข้อมูลประจำตัว set identity_insert onคุณสามารถโหลดค่าลงในคอลัมน์ประจำตัวผ่าน

การเขียนโปรแกรม

Idiomatic T-SQL มีความแตกต่างบางอย่างกับสำนวน PL / SQL มันทำงานแตกต่างกันมากพอที่ความแตกต่างของกรอบความคิดบางอย่างจะอธิบายในเชิงลึกมากขึ้น

  • T-SQL ไม่มีแนวคิดของแพ็คเกจ โพรซีเดอร์และฟังก์ชันที่เก็บไว้ทั้งหมดในฐานข้อมูลจะอยู่ในเนมสเปซทั่วไปแม้ว่าจะสามารถใช้สกีมาเพื่อแยกย่อยได้และเนมสเปซจะอยู่ในฐานข้อมูล

  • SELECT INTOรับความรู้สึกสำหรับวิธีการใช้ตารางชั่วคราวและ ค่อนข้างยากที่จะพบรหัส T-SQL ที่ต้องการเคอร์เซอร์ ตารางชั่วคราวช่วยให้การดำเนินการแตกออกเป็นขั้นตอนที่สามารถทำได้ด้วยการตั้งค่า SELECT INTOใน tempdb จะถูกบันทึกอย่างน้อยที่สุดและจะถูกบันทึกอย่างน้อยที่สุดในโหมดการกู้คืนบางอย่างบนฐานข้อมูลผู้ใช้เช่นกันดังนั้นจึงเร็วพอ ๆ กับตัวดำเนินการแบบสอบถามที่ยังคงมีผลการเข้าร่วมระดับกลาง

    Idiomatic T-SQL จะใช้ตาราง temp ในการเรียงลำดับของบทบาทที่คุณจะเห็นตัวแปรเคอร์เซอร์ใน PL / SQL แต่จะใช้ประโยชน์จากชุดปฏิบัติการ อย่างไรก็ตามตารางชั่วคราวสามารถสร้างรหัสที่ไม่เหมาะสมได้ดังนั้นควรใช้ด้วยความระมัดระวัง

  • พจนานุกรมข้อมูลของระบบนั้นดูถูกกว่า Oracle ในเวอร์ชันเก่ากว่า แต่มันก็ดีกว่ากับ SQL Server 2005 ถึงแม้ว่าเครื่องมือที่มาจาก Microsoft นั้นมีเครื่องมือวิปัสสนาจำนวนมากที่สร้างขึ้นในตัวสำรวจ SSMS แต่ก็คุ้มค่าที่จะทราบว่า ทางรอบ ๆ พจนานุกรมข้อมูล มันไม่ได้แตกต่างระหว่างALL, USERและDBAมองเห็นวิวของ DB วัตถุแม้ว่า

  • SSMS มีโปรแกรมดูแผนแบบสอบถามในตัว

  • ตัวระบุในรหัส T-SQL สามารถอ้างอิงด้วย [] และสามารถมีขยะได้ทุกประเภทหากเสนอราคา อย่างไรก็ตามถ้าเราจับคุณเรียกคอลัมน์ 'โดยตรง / โอน' เราจะฉีกลำไส้ของคุณออก

  • SQL Server มีฟังก์ชั่นหน้าต่าง (ตั้งแต่ปี 2005 IIRC) ดังนั้นคุณสามารถทำการสั่งซื้อเรียกใช้เงินก้อนและสิ่งที่คล้ายกันภายในกลุ่มตอนนี้

  • T-SQL นั้นไม่เทียบเท่าโดยตรงถึงCONNECT BYแม้ว่าการเรียกซ้ำสามารถทำได้ผ่าน CTE แบบเรียกซ้ำ

  • หากคุณต้องการเขียนโค้ดที่กระโดดข้ามฐานข้อมูล (ซึ่งตรงกันข้ามกับสกีมาภายในฐานข้อมูล) ให้ลองใช้คำพ้องความหมายสาธารณะเพื่อใช้นามแฝงของวัตถุไปยังสิ่งที่อยู่ในระบบและอ้างถึงนามแฝงในรหัส สิ่งนี้หลีกเลี่ยงการอ้างอิงแบบกำหนดตายตัวในชื่อฐานข้อมูล

  • ถ้าคุณหลีกเลี่ยงการพึ่งพาโค้ดแบบหนักในชื่อฐานข้อมูลฐานข้อมูลทำให้การดูแลรักษาสภาพแวดล้อมหลาย ๆ เครื่องบนเซิร์ฟเวอร์เดียวกันทำได้ง่าย

  • บางสิ่งเช่นฟังก์ชั่นการรวมแบบกำหนดเองสามารถนำไปใช้งานได้โดยใช้ CLR Sprocs นอกจากนี้หากคุณต้องการหลบหนีจากบริบทการทำธุรกรรม (เช่นการปลอมธุรกรรมอิสระสำหรับการบันทึกข้อผิดพลาดย้อนกลับ) คุณสามารถใช้ CLR sproc เนื่องจากสามารถสร้างการเชื่อมต่อท้องถิ่นนอกบริบทการทำธุรกรรมปัจจุบัน

ความปลอดภัย

การเข้าสู่ระบบจะถูกกำหนดในระดับอินสแตนซ์ของ SQL Server แต่การล็อกอินแต่ละครั้งจะแมปกับฐานข้อมูลศูนย์หรือมากกว่านั้นในฐานะ 'ผู้ใช้ฐานข้อมูล' สิทธิ์ลูกเบี้ยวจะถูกกำหนดให้กับทั้ง 'การล็อกอิน' (เซิร์ฟเวอร์) และ 'ผู้ใช้' (ฐานข้อมูล) แต่ใน 'บทบาท' ฐานข้อมูลจะใช้งานตามปกติ ผู้ใช้อยู่ในบทบาทการอนุญาตถูกกำหนดให้กับบทบาท SQL Server 2012 เพิ่ม 'บทบาทเซิร์ฟเวอร์'

  • SQL Server 2012 แนะนำแนวคิดที่เรียกว่า 'ฐานข้อมูลบางส่วนที่มีอยู่' ซึ่งช่วยให้ผู้ใช้และข้อมูลบทบาทได้รับการจัดเก็บไว้ในฐานข้อมูลนั้น

  • ภายในฐานข้อมูลแนวคิดของผู้ใช้และสคีมาจะถูกแยกออก ผู้ใช้หรือบทบาทสามารถกำหนดให้กับสคีมาและสคีมาเป็นเจ้าของวัตถุฐานข้อมูล

  • การรับรองความถูกต้องของ Windows ใช้ข้อมูลเข้าสู่ระบบเบื้องหลังเพื่อรับรองความถูกต้องของผู้ใช้บนเครื่องหรือโดเมนกับการเข้าสู่ระบบ SQL Server การสนับสนุน IIRC สำหรับตัวเลือกนี้เป็นทางเลือกเพิ่มเติมสำหรับ Oracle

  • บทบาทพิเศษ 'dbo' (ย่อมาจาก 'เจ้าของฐานข้อมูล') มีสิทธิพิเศษแบบผู้ใช้ระดับสูงภายในฐานข้อมูลเฉพาะ แต่ละฐานข้อมูลมีบทบาท 'dbo' และผู้ใช้สามารถกำหนดให้กับบทบาท 'dbo' ในฐานข้อมูลที่กำหนด

  • นอกจากนี้ยังมีสคีมา 'dbo' เริ่มต้นด้วย วัตถุอาจเป็นเจ้าของโดย dbo schema - วัตถุที่สร้างโดยผู้ใช้ที่มีบทบาท 'dbo' (หรือสิทธิ์ระดับผู้ดูแลระบบทั่วทั้งระบบ) จะเริ่มต้นด้วยการเป็นเจ้าของโดย 'dbo' schema ยกเว้นว่ามีการให้ schema อื่นอย่างชัดเจน

  • ข้อมูลความปลอดภัยจะไม่ได้รับการสำรองข้อมูลของฐานข้อมูลเดียว ผู้ใช้ต้องและบทบาทจะต้องกำหนดค่าอย่างชัดเจนบนเซิร์ฟเวอร์การสำรองข้อมูลจะถูกเรียกคืน SQL Server 2012 อนุญาตให้ผู้ใช้และข้อมูลบทบาทถูกเก็บไว้ในฐานข้อมูลด้วยคุณลักษณะ 'ฐานข้อมูลที่มีอยู่บางส่วน' ใหม่

  • จาก SQL Server 2005 สามารถดำเนินการขั้นตอนการจัดเก็บในบริบทความปลอดภัยของผู้โทรผู้สร้าง schema ที่เป็นเจ้าของหรือผู้ใช้ที่ระบุ

  • ในมุมมองบน SQL Server สิทธิ์ในตารางพื้นฐานจะขึ้นอยู่กับสิทธิ์ของสคีมาที่เป็นเจ้าของมุมมอง สิทธิ์ของผู้ใช้ในตารางที่อยู่ข้างใต้ไม่ได้มีส่วนร่วมในการรักษาความปลอดภัยแม้ว่าคำจำกัดความการดูอาจมีตัวกรองที่รับข้อมูลจากเซสชัน ใน Oracle สิทธิ์ของผู้ใช้ในตารางพื้นฐานอาจส่งผลต่อมุมมองขึ้นอยู่กับการกำหนดค่าของการมอบสิทธิ์

การตรวจสอบและปรับแต่ง

TBA - สถาปัตยกรรมหน่วยความจำกับ SGA ฯลฯ ใน oracle

สำรองและกู้คืน

จะแจ้งภายหลัง

การขับรถ

Microsoft รวมชุดเครื่องมือโดยรอบเข้ากับ SQL Server รายการสำคัญที่ให้มาคือ:

  • SQL Server Management Studio (SSMS): สิ่งนี้คล้ายกับ SQL Developer บน Oracle - เป็นเครื่องมือแก้ไขและการเรียกใช้โค้ด คุณสมบัติที่มีประโยชน์บางอย่างรวมถึงเบราว์เซอร์วัตถุฐานข้อมูลและโปรแกรมดูแผนแบบสอบถาม

  • บริการวิเคราะห์เซิร์ฟเวอร์ SQL (SSAS): นี่คือเซิร์ฟเวอร์ OLAP ที่แตกต่างจากเซิร์ฟเวอร์ฐานข้อมูล มันใช้ภาษาแบบสอบถามของตนเอง (MDX) และ API (XML / A) สำหรับการสื่อสารลูกค้าเซิร์ฟเวอร์ ไม่สามารถสอบถามกับ SQL ได้ SSMS มีเครื่องมืออำนวยความสะดวกสำหรับการแก้ไข MDX และแบบสอบถาม XMLA แบบดิบและแสดงผลลัพธ์ เครื่องมือการสืบค้นบรรทัดคำสั่งที่เรียกว่า ASCMD.EXE ก็มีให้เช่นกัน

  • บริการรายงานเซิร์ฟเวอร์ SQL (SSRS): นี่คือเครื่องมือการรายงานบนเว็บสำหรับการเผยแพร่รายงาน สามารถสร้างรายงานผ่าน BI Development Studio (BIDS) หรือ Report Builder และเผยแพร่ไปยังเว็บพอร์ทัล เซิร์ฟเวอร์ SSRS นั้นมี API บริการบนเว็บสำหรับจัดการเซิร์ฟเวอร์แบบเป็นโปรแกรม โปรดทราบว่ารายงาน SSRS สามารถใช้ข้อมูลจากแหล่งข้อมูลที่หลากหลายไม่ใช่เฉพาะเซิร์ฟเวอร์ SQL เครื่องมือบรรทัดคำสั่งที่เรียกว่า RS.EXE มีให้สำหรับการจัดการเซิร์ฟเวอร์ SSRS โดยทางโปรแกรม

  • บริการการรวมเซิร์ฟเวอร์ SQL (SSIS): นี่คือเครื่องมือ ETL ที่มาพร้อมกับ SQL Server ในเชิงสถาปัตยกรรมแล้วมันค่อนข้างแตกต่างจาก OWB หรือ ODI เนื่องจากไม่ใช่เครื่องมือสร้างรหัส รันไทม์อยู่ฝั่งไคลเอ็นต์และสามารถอยู่บนเครื่องที่แยกต่างหากไปยังเซิร์ฟเวอร์ฐานข้อมูล แพคเกจ SSIS สามารถพัฒนาได้ด้วยการประมูลและดำเนินการอย่างอิสระด้วยเครื่องมือบรรทัดคำสั่งที่เรียกว่า DTEXEC.EXE

  • BI Development Studio (BIDS): นี่คือสตูดิโอภาพที่ใช้เทคโนโลยีเพื่อการพัฒนารายงานชุด SSIS และคิวบ์ SSAS หากมีการติดตั้งเครื่องมือการพัฒนาแบบ VS อื่น ๆ (เช่น VS Professional) การใช้เครื่องมือสามารถรวมเข้ากับสภาพแวดล้อมเดียวและการจัดกลุ่มโครงการทั่วไป

  • สำเนาจำนวนมาก (BCP): เครื่องมือแทรก / แตกไฟล์กลุ่มคำสั่งที่คล้ายกับ SQL * Loader

  • SQLCMD: เครื่องมือสืบค้นข้อมูลบรรทัดคำสั่งที่คล้ายกับ SQL * plus

  • SQL Profiler: เครื่องมือการติดตามและการทำโปรไฟล์ที่สามารถดักจับและประเมินข้อมูลการติดตามจาก SQL Server, SSAS และเครื่องมืออื่น ๆ ในชุด

  • บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL: โปรแกรมอรรถประโยชน์การจัดกำหนดการงานที่สามารถเรียกใช้งานเป็นระยะเวลาของการเรียงลำดับอื่น


1
ใน T-SQL กับ PL / SQL: T-SQL ไม่มีบริบทการเขียนโปรแกรมที่แตกต่างกันเช่น PL / SQL ดังนั้นคุณสามารถผสมคำสั่ง SQL และ T-SQL ได้อย่างอิสระ ตัวอย่างเช่นคุณสามารถเรียกใช้TRUNCATE TABLE ...ควบคู่ไปกับดราก้อนได้โดยไม่EXECUTE IMMEDIATEต้องทำอย่างไรเทียบเท่า ใน T-SQL คุณสามารถส่งคืนชุดผลลัพธ์ไปยังไคลเอ็นต์โดยใช้SELECTควบคู่กับการดำเนินการอื่น ๆ ในขณะที่ใน PL / SQL คุณต้องส่งผลลัพธ์ของSELECTs ไปยังตารางหรือปลายทางอื่น ๆ ใน Oracle มีเพียง SQL บริสุทธิ์เท่านั้นที่สามารถส่งคืนชุดผลลัพธ์ให้กับลูกค้าได้
Nick Chammas

1
โปรดทราบว่าขั้นตอนการจัดเก็บที่มีชื่อขึ้นต้นด้วย "sp_" จะได้รับการปฏิบัติเป็นพิเศษ อย่าตั้งชื่อ procudes ที่เก็บไว้ของคุณเว้นแต่ว่าคุณกำลังทำขั้นตอนระบบย้อนกลับจากเซิร์ฟเวอร์ SQL เวอร์ชันที่ใหม่กว่า คุณสามารถใช้ประโยชน์ทางเทคนิคนี้เพื่อสร้างขั้นตอนการจัดเก็บฐานข้อมูลกว้าง แต่ไม่แนะนำให้ใช้เพราะเวอร์ชันในอนาคตอาจสร้างกระบวนการใหม่ที่จัดเก็บระบบด้วยชื่อเดียวกัน
Kevin Cathcart

1
มันมีมูลค่าเพิ่มเล็กน้อยเกี่ยวกับการเพิ่มการล็อคที่นี่? ฉันคิดว่ามันน่าประหลาดใจที่ Oracle อาจคุ้นเคยกับการล็อกระดับแถวไม่ จำกัด
Jack Douglas

8

ผลิตภัณฑ์หลักของเราทำงานได้ทั้งบน SQL Server และ Oracle ต่อไปนี้เป็นข้อแตกต่างอื่น ๆ ที่เราต้องแก้ไขและควรจำไว้ว่า:

  • การจัดการวันที่จะแตกต่างกันมาก: การกำหนดที่แตกต่างกัน, ชุดของฟังก์ชั่นที่แตกต่างกันในการทำงาน

  • สตริงว่างเป็น NULL ใน Oracle ไม่ใช่ใน SQL Server

  • การจัดการการเข้ารหัสอักขระและ Unicode นั้นแตกต่างกันมาก ใน SQL Server คุณสามารถมีคอลัมน์ปกติ ( varchar) หรือ Unicode ( nvarchar) ผสมกันในฐานข้อมูลเดียวกันใน Oracle คุณตัดสินใจในระดับฐานข้อมูลที่จะใช้การเข้ารหัส


ออราเคิลยังช่วยให้การผสมถ่าน / varchar2 และ nchar / NVARCHAR2 ประเภทสองการเข้ารหัสที่แตกต่างกัน - ดูอักขระ Unicode สามารถเก็บไว้ในฐานข้อมูล Oracle ในสองวิธี
George3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.