document

59

Upload: beau-johnson

Post on 30-Dec-2015

57 views

Category:

Documents


0 download

DESCRIPTION

. Comparing SQL Server and Oracle. Comparing Oracle and SQL Server Similarities. Similar Schema Objects (tables, views) Similar Datatypes Referential Integrity Check Constraints / Rules Transaction Support Triggers and Stored Subprograms SQL Access to System Catalogs. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: document
Page 2: document

<Insert Picture Here>

Comparing SQL Server and Oracle

Page 3: document

Comparing Oracle and SQL Server Similarities

• Similar Schema Objects (tables, views)• Similar Datatypes• Referential Integrity • Check Constraints / Rules• Transaction Support• Triggers and Stored Subprograms• SQL Access to System Catalogs

Page 4: document

Comparing Data Types

SQL Server Oracle

INTEGER NUMBER(10)

SMALLINT NUMBER(6)

TINYINT NUMBER(3)

DECIMAL(p,[q]) NUMBER(p,[q])

NUMERIC(p,[q]) NUMBER(p,[q])

REAL FLOAT

FLOAT[(p)] FLOAT[(p)]

BIT NUMBER(1)

CHAR(n) CHAR(n)

VARCHAR(n) VARCHAR2(n)

NCHAR(n) CHAR(n*2)

NVARCHAR(n) VARCHAR2(n*2)

Page 5: document

Comparing Data Types

SQL Server Oracle

TEXT CLOB

IMAGE BLOB

BINARY(n) RAW(n), BLOB

VARBINARY(n) RAW(n), BLOB

DATETIME DATE (or TIMESTAMP)

SMALLDATETIME DATE

MONEY NUMBER(19,4)

SMALLMONEY NUMBER(10,4)

TIMESTAMP NUMBER

SYSNAME VARCHAR2(30)

Page 6: document

Comparing Oracle and SQL ServerOrganization

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 7: document

Comparing Oracle and SQL Server What is a database?

Oracle database: • Collection of

schemas

• Stored in tablespaces

• Central schema: SYSTEM

SQL Server

database = Oracle schema

Memory

Processes

SYSTEM

Schema 1Schema 2Schema 3

Memory

Processes

Master, model,msdb,

tempdb Database 1 Database 2 Database 3

Oracle instance = SQL Server server(Database plus processes)

Page 8: document

Comparing Storage Structures

• Oracle• Database

• Tablespace

• Segment

• Extent

• Block

• SQL Server• Database

• Filegroup

• Extent (64 KB fixed)

• Page (8 KB fixed)

Page 9: document

SQL Server Storage Structures

• Fundamental storage unit: Page (8 KB fixed)• Basic unit to allocate space to tables and indexes: Extent

(64 KB fixed)

OS file:

Primary data file

Secondary data file

Database

Log file

Filegroup

Page 10: document

Oracle Storage Structures

• Fundamental storage unit: Block• A logical block consists of one or more OS blocks.• The size of a logical block is defined by an initialization

parameter.

OS block

Tablespace

Logical Physical

Extent

Segment

Block

Data file

Page 11: document

Comparing Oracle and SQL ServerTerminology

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 12: document

Differences in Terminology

• Oracle spfile(auto managed binary) = SQL Server sysconfig• Oracle v$, USER_TABLES = SQL Server sp_ stored procedures,

sysxxx tables• Oracle has schemas/tablespaces = SQL Server

databases/devices• Oracle has redo buffer cache, redo logs for archiving = SQL

Server transaction log• Oracle has UNDO space for read consistency = no equivalent in

SQL Server* (SS2K5)

• Oracle SQL*PLUS (/) = SQL Server ISQL (go)

Page 13: document

Connecting to the Database

• With multiple databases in SQL Server, you use the following command to switch databases:

• With only one database in Oracle, you issue one of the following commands to switch schemas:

• OR

SQL> Use hr

SQL> CONNECT hr/hr;

SQL> ALTER SESSION SET CURRENT_SCHEMA=HR;

Page 14: document

Comparing Schema Objects

• Oracle schema objects not available in SQL Server:• Database link• Profile• Materialized view• Sequence (SQL Server: Serial data type)• Synonym

• SQL Server rule, integrity, and default are implemented as constraints of Oracle tables.

Page 15: document

Naming Database Objects

• Names must be from 1 to 30 bytes long with these exceptions:• Names of databases are limited to 8 bytes.• Names of database links can be as long as 128 bytes.

• Nonquoted names cannot be Oracle-reserved words.

• Nonquoted names must begin with an alphabetic character from your database character set.

Page 16: document

Naming Database Objects

• Nonquoted names can contain only: • Alphanumeric characters from your database character set• The underscore (_)• Dollar sign ($)• Pound sign (#)

• No two objects can have the same name within the same namespace.

• MS Tip: OMWB assists with resolving naming conflicts.

Page 17: document

Comparing Oracle and SQL ServerConnection Models

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 18: document

Differences in Connection Models

• The Oracle server is “connection-based”. It offers:• Multiple active result-sets per connection• Only one connection needed• Multiple sessions per connection• Multiple transactions per session• Distributed database access via database links

• SQL Server is “stream-based”. It offers:• One active result-set per connection• Typically several connections used

Page 19: document

• SQL Server automatically put resultsets in stream• Returns data in Tablular Data Stream format (TDS)• Multiple resultsets possible

• Oracle provides cursor variables• Client receives cursor variable• Cursor Variable is a handle to server side memory resident

cursor• Client fetches as much of data as desired• Multiple Cursor Variables easily accommodated• Can pass Cursor Variable to other clients or servers

Handling Result Sets

Page 20: document

Comparing Oracle and SQL ServerTransaction & Isolation Models

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 21: document

Comparing Transactional Models

Oracle SQL Server

‘Readers’ never block ‘writers’ Read locks provide consistency, but may block ‘writers’.

‘Read’ transactions are always consistent.

’Dirty reads’, i.e. reads of uncommitted data allowed to bypass locks

True row-level locks N/A

Locks never escalate Locks escalate as numbers increase

Locking on with the block Locking in memory

Page 22: document

Transactional Models

• Oracle supports always full Isolation Model• Only committed data visible to other users• Allows repeatable reads

• SQL Server allows several modes • SET TRANSACTION ISOLATION LEVEL … for

each transaction• Uses BROWSE mode (timestamp) to detect update

conflicts (optimistic locking)

Transaction Handling

Page 23: document

• Oracle has implicit Transactions• All SQL statements are transaction controlled• No BEGIN TRANSACTION - a new transaction begins at the end of the previous one• Transaction ends at COMMIT or ROLLBACK

• Nested Transactions could be defined via SAVEPOINT

• SQL Server programmers use explicit Transactions• Programmers may explicitly use BEGIN, END TRANSACTION and control

COMMIT/ROLLBACK manually.• If not in an explicit transaction, each statement auto-commits after execution• Nested Transactions do not commit but may rollback

Transaction Handling

Transactional Models

Page 24: document

Comparing the Transaction Models

• Key differences between the transaction models:

SQL Server Oracle

Begin a

transaction.

Explicit Implicit

End a

transaction.

Uses auto-commit mode

by default

Requires the COMMIT

statement by default

Page 25: document

Beginning a Transaction

SQL Server begins transactions explicitly:

The Oracle database begins transactions implicitly:

SQL> INSERT INTO regions VALUES (5, Southeast Asia’); 2 INSERT INTO countries VALUES (‘VN’,‘Vietnam’, 5); 3 COMMIT;

SQL> BEGIN TRANSACTION 2 INSERT INTO regions VALUES (5, ‘Southeast Asia’) 3 INSERT INTO countries VALUES (‘VN’, ‘Vietnam’, 5) 4 COMMIT TRANSACTION

Page 26: document

Ending a Transaction

SQL Server always commits statements if outside an explicit transaction:

With Oracle you always need to COMMIT or ROLLBACKSQL> INSERT INTO regions 2 VALUES (6, ‘South America’); 3 COMMIT; 4 INSERT INTO countries 5 VALUES (‘PE’, ‘Peru’, 6)

6 COMMIT;

SQL> INSERT INTO regions 2 VALUES (6, ‘South America’) 3 INSERT INTO countries 4 VALUES (‘PE’, ‘Peru’, 6)

Transaction #1

Transaction #2

Transaction #1

Transaction #2

Page 27: document

Comparing Isolation Levels

• Isolation levels supported by SQL Server and Oracle:

Isolation Level SQL Server Oracle

Read uncommitted

Read committed Default Default

Repeatable read

Serializable

**

* Read Only Transactions only* Read Only Transactions only

Page 28: document

Comparing Oracle and SQL ServerTemporary Tables

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 29: document

Temporary Tables

• SQL Server:• Local temporary tables, names beginning with #• Global temporary tables, names beginning with ##• Not compatible with Oracle’s naming conventions

• Options in Oracle:• Temporary ANSI-style (global temporary) tables• Multitable joins (optimized internally)• Materialized views• PL/SQL tables

Page 30: document

Temporary Tables

• Data exists only for the duration of a transaction or session

• Data only visible within a single transaction or session

• No redo generated, only undo

• Data segments created in a user’s temporary tablespace

CREATE GLOBAL TEMPORARY TABLE emp_temp(

eno NUMBER, ename VARCHAR2(20), sal NUMBER)

ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE emp_temp(

eno NUMBER, ename VARCHAR2(20), sal NUMBER)

ON COMMIT DELETE ROWS;

INSERT INTO emp_temp VALUES( 101,’Inga’,1000);

SELECT count(*) FROM emp_temp;

INSERT INTO emp_temp VALUES( 101,’Inga’,1000);

SELECT count(*) FROM emp_temp;

Page 31: document

Comparing Oracle and SQL ServerProgramming

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 32: document

Migrate a table with an IDENTITY column

• Oracle doesn't support the IDENTITY attribute. If you want an auto-incrementing column in Oracle, then create a sequence and use that sequence in a trigger associated to the table

Page 33: document

Migrate a table with an IDENTITY column

• SQL Server version• Create the Table

• Insert Row

SQL> CREATE TABLE Friend (

2 FriendID INT IDENTITY PRIMARY KEY NOT NULL,

3 Name VARCHAR(50),

4 PhoneNo VARCHAR(15)DEFAULT ‘Unknown Phone’)

SQL> INSERT INTO Friend (Name, PhoneNO)

2 VALUES (‘Mike’,’123-456-7890’);

Page 34: document

Migrate a table with an IDENTITY column

• Oracle version• Create the Table

• Insert Row

SQL> CREATE TABLE Friend (

2 FriendID NUMBER PRIMARY KEY NOT NULL,

3 Name VARCHAR(50),

4 PhoneNo VARCHAR(15)DEFAULT ‘Unknown Phone’)

SQL> INSERT INTO Friend (Name, PhoneNO)

2 VALUES (‘Mike’,’123-456-7890’);

Page 35: document

Migrate a table with an IDENTITY column

• Oracle version cont.• Create the Sequence

• Create the TriggerSQL> CREATE SEQUENCE SEQ;

SQL> CREATE OR REPLACE TRIGGER FRIEND_AUTO_NUMBER

2 BEFORE INSERT ON Friend

3 FOR EACH ROW

4 BEGIN

5 SELECT SEQ.NEXTVAL INTO :NEW.FriendID FROM DUAL;

6 END;

Page 36: document

SQL> SELECT customer_id, date_of_birth 2 FROM customers 3 WHERE cust_email = ‘ ’

Null Handling Semantics

• SQL Server interprets the empty string as a single blank space.

• Oracle interprets the empty string as NULL value. Rewrite to use a single blank space and not the empty string.

SQL> SELECT customer_id, date_of_birth 2 FROM customers 3 WHERE cust_email = ‘’

Page 37: document

SQL Comparison

Page 38: document

Object Name Changes

• The way to reference a table or view in a SQL statement is different:• SQL Server

• database_name.owner_name.table_name• Oracle

• user_schema.table_name• Example accessing other schema:

SQL Server Oracle

SELECT * FROM oe.oe_dba.orders SELECT * FROM oe.orders

Page 39: document

Displaying Information about an object

• In Oracle use the SQL*Plus DESCRIBE command to display the structure of a table.

OracleMicrosoft SQL Server

DESCRIBE table_nameSP_HELP table_name

Page 40: document

SELECT Statement: FROM Clause

In SQL Server, FROM clause is optional.

In Oracle, FROM clause is required.

SQL> SELECT sysdate FROM dual;

SQL> SELECT getdate()

Page 41: document

SELECT Statement: SELECT INTO Clause

In SQL Server, SELECT INTO clause is used.

In Oracle, if the table exists, rewrite using the INSERT INTO clause.

SQL> INSERT INTO contacts 2 SELECT cust_first_name, cust_last_name 3 FROM customers;

SQL> SELECT cust_first_name, cust_last_name 2 INTO contacts 3 FROM customers

Page 42: document

SELECT Statement: SELECT INTO Clause cont.

In SQL Server, SELECT INTO clause is used.

In Oracle, if the table does not exist, rewrite using the Create table as select clause.

SQL> CREATE contacts AS 2 SELECT cust_first_name, cust_last_name 3 FROM customers

SQL> SELECT cust_first_name, cust_last_name 2 INTO contacts 3 FROM customers

Page 43: document

SELECT Statement: Column Alias

In SQL Server, example using column alias:

In Oracle, column alias is placed after the column nameSQL> SELECT cust_email email

2 FROM customers;

SQL> SELECT email = cust_email 2 FROM customers

Page 44: document

SELECT Statement: TOP n Clause

In SQL Server, TOP clause is gives you the top n rows retrieved in the result set.

In Oracle, you must do a subselect and use ROWNUM

SQL> SELECT * FROM(SELECT empname, total_com FROM emp ORDER BY total_com )WHERE ROWNUM < 6

SQL> SELECT TOP 5 empname, total_com FROM emp ORDER BY total_com

Page 45: document

INSERT Statement

• In SQL Server, the INTO clause is optional.

• In Oracle, the INTO clause is required.

SQL> INSERT INTO regions

2 VALUES (202, ‘Southeast’);

SQL> INSERT regions

2 VALUES (202, ‘Southeast’)

Page 46: document

UPDATE statement

• SQL Server example:

• Rewrite in Oracle:

SQL> UPDATE inventories 2 SET quantity_on_hand = 0 3 WHERE product_id IN (SELECT product_id 4 FROM product_information 5 WHERE product_status = ‘planned’);

SQL> UPDATE inventories

2 SET quantity_on_hand = 0

3 FROM inventories i, product_information p

4 WHERE p.product_id = p.product_id 5 and product_status=‘planned’

Page 47: document

DELETE statement

• SQL Server:

• Rewrite in Oracle:

SQL> DELETE FROM inventories 2 FROM inventories i, product_information p 3 WHERE i.product_id = p.product_id 4 AND supplier_id = 102066

SQL> DELETE FROM inventories 2 WHERE product_id IN (SELECT product_id 3 FROM product_information 4 WHERE supplier_id = 102066);

Page 48: document

Operators

• Examples of operator differences:

SQL Server Oracle

Value

Comparison

WHERE qty !< 100 WHERE qty >= 100

Null Value

Comparison

WHERE status = NULL WHERE status IS NULL

String

Concatenation

and Literals

SELECT fname + ‘ ‘ +

lname AS name

SELECT fname || ‘ ‘

|| lname AS name

Page 49: document

Built-In Functions

• Both SQL Server and Oracle have proprietary built-in functions:

SQL Server Oracle

Character char() chr()

Null Test isnull(qty, 0) nvl(qty,0)

Conditional Test CASE cust_type

WHEN 1 THEN ‘Gold’

WHEN 2 THEN ‘Silver’

WHEN 3 THEN ‘Bronze’

END

DECODE (cust_type,

1,’Gold’,

2,’Silver’,

3, ‘Bronze’)

Oracle also has CASE

Page 50: document

Data Type Conversion

• SQL Server uses the CONVERT function to convert data types.

• Replace with the appropriate Oracle equivalent function:

SQL> SELECT TO_CHAR(sysdate)

2 FROM dual;

SQL> SELECT CONVERT(char, GETDATE())

Page 51: document

Comparing Oracle and SQL ServerStored procedures

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 52: document

Stored Modules

• Oracle Stored Modules are coded in Java or PL/SQL• They can either be PROCEDURES or FUNCTIONS• They can be contained in PACKAGES

Page 53: document

Stored Modules

• Most SQL Server Stored Modules are coded in Transact SQL.

• They can act as either procedures or functions.• A set of modules can be coded under the same name

using a numeric suffix to identify different modules.

Page 54: document

Issues in Transact SQL Conversion

• Transaction Handling and Control• Stored Sub Programs returning Resultsets • Error Handling• SQL Syntax• Specific Built-in Functions• Dynamic SQL• Packaged Modules

Page 55: document

• SQL Server / Sybase propagate errors back to client via global variable• @@Error needs to be checked regulary

• Oracle has Exception Handling in PL/SQL to deal with errors• Throw/Catch exception model• SQL statements are embedded in a PL/SQL block with optional

EXCEPTION section• Use EXCEPTION to trap exactly the error conditions you wish• Un-handled exceptions propagate to higher levels

T-SQL issues - Error Handling

Business Logic -Transact-SQL

Page 56: document

Comparing Oracle and SQL ServerTriggers

SQL Server Oracle

Types of

triggers

INSERT, UPDATE, and

DELETE statements

INSERT, UPDATE,

DELETE statements

Occurrence AFTER and INSTEAD OF

trigger

BEFORE, AFTER and

INSTEAD OF triggers

Occurrence Statement level Row or statement level

Reference to

previous and

new values

Uses DELETED and

INSERTED temporary tables

Accessed via :OLD

and :NEW

Page 57: document

Comparing Oracle and SQL ServerUtilities

Main Differences:• Organization• Terminology• Connection Models• Transactional and Isolation Models• Temporary Tables• Application programming• Stored Subprograms• Utilities (Bulk Loading)

Page 58: document

Differences in Utilities

• Oracle has scott/tiger schema = SQL Server PUBS database• Oracle has System/manager = SQL Server SA/• Oracle Oracle Call Interface = SQL Server DB-Library/CT-Library• Oracle SQL*Loader = SQL Server BCP• Oracle Warehouse Builder = SQL Server Data Transformation

Services (DTS)• Oracle Advanced Queuing (AQ) = MSMQ

Page 59: document

AQ&Q U E S T I O N SQ U E S T I O N S

A N S W E R SA N S W E R S