470 likes | 950 Views
OPS-6: Beginners Guide to OpenEdge ® SQL via ODBC or JDBC. Brian Werne. Sr. Engineering Manager OpenEdge SQL and OpenEdge Management. Agenda:. Goal: Make you successful with SQL applications!. OpenEdge SQL component overview and your initial connection
E N D
OPS-6: Beginners Guide to OpenEdge® SQL via ODBC or JDBC Brian Werne Sr. Engineering Manager OpenEdge SQL and OpenEdge Management
Agenda: Goal: Make you successful with SQL applications! • OpenEdge SQL component overview and your initial connection • Setup and maintenance of the OpenEdge database for control and performance • Specifics of the OpenEdge with the SQL based tools and applications OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdgeABL Server OpenEdgeSQL Server OpenEdgeRDBMS OpenEdgeDataServers OpenEdge is Open Crystal Reports WebSphere® JBOSS / JRun Java / JDBC apps J2EE™ / JTA .NET / ODBC apps ADO.NET / VB ABL: OpenEdge SQL (ABL works with relational DBs) Open Clients: Java™ .NET™ Web services (works with OpenEdge RDBMS) .NETJavaHTML ODBC Clients JDBC Clients ServiceInterfaces OpenEdge ABL Clients Open Clients(Non-OpenEdge) SSL HTTP HTTP/S HTML Oracle®MSSQLODBC Data is fully interoperable: ABL & SQL
Getting Connected – Client side: ODBC and JDBC drivers OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
JDBC driver Type 4 JDBC driver (10.1a+) • CLASSPATH ( run ‘sql_env’) • Class loader • URL • $DLC/java: openedge.jar, util.jar, base.jar • com.ddtek.jdbc.openedge.OpenEdgeDriver jdbc:datadirect:openedge://localhost:6748;databaseName=db1 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
ODBC DSN – single connection OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
ODBC DSN Advanced Tab OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Isolation Level Affect on Lock Type OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
ODBC : Multi-DataBase configuration OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Connection – server side OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
SQL Servers Shared Memory SQL client SQL client Database ABL Servers Default server settings SQL & ABL Broker ABL client ABL client OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
SQL Servers Shared Memory SQL client SQL client Database ABL Servers “Recommended” server setup SQL only Broker ABL client ABL client ABL only Broker OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Recommended parameters example Separating ABL and SQL brokers/servers … examples • Example: Start a ABL Primary broker • Example: Start a Secondary SQL broker proserve Sports2000 -S 6000 -H localhost -n 45 -Mn 8 -Mpb 4 -ServerType4GL -Mi 1 -Ma 5 -minport 6100 -maxport 6300 proserve Sports2000 -S 5000 -H localhost -m3 –Mpb 3 -ServerType SQL –Mi 5 –Ma 5 -minport 5100 -maxport 5300 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Security Who am I? Authorization Authentication What am I allowed to do? OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Security Considerations ID and passwords Database authentication • SQL • Always requires a user ID and password to establish a connection • ABL • Does not specifically require a user ID and password to establish a connection OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
SQL Authentication (Who am I?) ID and passwords scenarios • Case 1: Users have not been created (no rows in _User table) • Password validation is not enabled • No check is performed at connection time • No error message at connection time OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
SQL Authentication (Who am I?) ID and passwords scenarios…cont’d • Case 2: Users exist in the OpenEdge RDBMS (rows exist in _User table) • Password Validation is enabled • Check is performed at connection time • Valid users defined by a DBA • Error message if login is incorrect / invalid: • “Access Denied (8933)” OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Comparing ABL & SQL Security Systems OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Encountering errors • Possible reason for this: • No authorization privileges • Schema scope Access denied (Authorization failed) (7512) OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Authorization – What can I do? • SQL follows GRANT security model By default, a connected userid is not allowed to do anything. Exceptions: - the DBA account (full operations) - the TABLE owner • DBA controls operation privileges with GRANT / REVOKE syntax OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Authorization – What can I do? Privileges – Syntax: GRANT (2 types) • Database wide (system admin or general creation) • For specified Tables or Views • Where ‘privilege’ is: { SELECT | INSERT | DELETE | INDEX | UPDATE [ ( column , column , ... ) ] | REFERENCES [ ( column , column , ... ) ] } GRANT { DBA, RESOURCE } TO user_name [, user_name ] , …; GRANT { privilege [, privilege ], … | ALL } ON table_name TO { user_name [, user_name ] , … | PUBLIC } [ WITH GRANT OPTION ]; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Encountering errors • Possible reasons for this: • Not authorized • Schema scope Table/View/Synonym not found (7519) OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
What is a Schema? Mysports database AuxCat Database PUB schema bwerne PUB Inventory Customer table OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Schemas • What is a default Schema? • A user has by default a schema attached to their ID SET SCHEMA { 'string_literal'} • OpenEdge ABL uses one schema – ‘PUB’ • Another option: Synonyms: • SET SCHEMA ‘pub’ • CREATE PUBLIC SYNONYM customer FOR pub.customer; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Schema example • SELECT count(*) FROM customer; • SELECT count(*) FROM customer; • Solutions: or Table/View/Synonym not found (7519) • SELECT count(*) FROM pub.customer; • SET SCHEMA ‘pub’; • SELECT count(*) FROM customer; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
4 Part Naming – Multi-Database Query Fully Qualified Names • Four level naming convention • Example • ABL has 3 level naming convention catalog.schema.table.column-name SELECT Pub.Customer.CustNum, SportsPrimary.Pub.Customer.Name, SportsAux1.Pub.Order.OrderNum … catalog.table.column-name OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics SQL is a standard, but each vendor has it’s own dialect OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics - Quoting Non-SQLStandard names • Hyphenated names: • Solution: quoting • SELECT cust-num FROM PUB.Customer; Column CUST cannot be found (13865) • SELECT “cust-num” FROM PUB.Customer; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Overstuffed fields - error • ABL allows more data than column definition • SELECT abc from PUB.Ranking; Column abc in table PUB.Ranking has value exceeding it’s max length. OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics - Overstuffed fields Strategies for managing: • Dbtool : percentage option ($DLC/bin/dbtool) 1. SQL Width & Date Scan w/Report Option 2. SQL Width Scan w/Fix Option Choice: 2 <connect>: (0=single-user 1=self-service >1=#threads)? 3 Padding % above current max: 25 <table>: (Table number or all)? all <area>: (Area number or all)? all OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics - Overstuffed fields Strategies for managing • ABL client startup parameter -checkwidth <progress-client>.exe –checkwidth nwhere "n" can be one of the following: 0 — Ignore _width value. Default. 1 — Store the data and generate a warning. 2 — Do not store data and generate an error. OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics – Arrays / Extents • Selecting array columns as a whole Result: semi-colon separated varchar value 102332.67;330002.77;443434.55;333376.50 • Selecting array column individually – SQL99 Result: numeric value 102332.67 • SELECT quarterlySales from PUB.MySales; • SELECT quarterlySales[1] from PUB.MySales; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
OpenEdge Specifics – Arrays / Extents Strategies: • Using views to break out array elements Result: numeric values 102332.67 330002.77 443434.55 333376.50 • CREATE VIEW PUB.QuarterSales AS SELECT quarterlySales[1], quarterlySales[2], • quarterlySales[3], quarterlySales[4] FROM PUB.MySales; • SELECT * FROM PUB.QuarterSales; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Query Performance • Q: What’s it gonna cost to run my query? TIME = OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Customers Orders Distributors OrderLines Parts SalesHist Suppliers What is the cost? Database without statistics ABC Corp DB Employees OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Basic Performance - What is the cost? Database with Update Statistics ABC Corp DB SalesHist OrderLines Customers Distributors Orders Parts Employees Suppliers OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Query Performance: Update Statistics UPDATE STATISTICS syntax • All Statistics: Table Cardinality, indexes and all columns • Statistics - particular table • UPDATE TABLE STATISTICS AND INDEX STATISTICS AND [ALL] COLUMN STATISTICS; • UPDATE TABLE STATISTICS AND INDEX STATISTICS AND [ALL] COLUMN STATISTICS • FOR pub.customer; OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Query trees : Defined • relational algebraic tree representation (query tree / execution tree ) Result set Data Database access OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Basic Performance – Query Plans Viewing query plan constructed by cost-based optimizer • Query Plans Located in VST _SQL_QPLAN SELECT SUBSTRING("_Description",1,80) FROM pub."_Sql_Qplan“WHERE "_Pnumber" = (SELECT MAX( "_Pnumber" ) FROM pub."_Sql_Qplan" WHERE "_Ptype" > 0 ); OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
table Query plan – what to look for • Simple single table select • “select … from pub.customer where custnum between 1000 and 1100 [NoExecute]” SELECT COMMAND. PROJECT [66] ( | PROJECT [64] ( | | PUB.CUSTOMER. [0]( | | | INDEX SCANOF ( | | | | CustNum, | | | | | (PUB.CUSTOMER.CustNum) between (1000,1100)) index index keys, predicates OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
In Summary • Initial SQL connection • Setup and maintenance in OpenEdge database for security and performance • Specifics of OpenEdge with SQL applications OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
For More Information, go to… • PSDN • Developing Performance-Oriented ODBC/JDBC OpenEdge Applications • OpenEdge SQL: Authorization Explained • OpenEdge SQL in a 10.1B Multi-Database Environment • OpenEdge® Database Run-time Security Revealed • OpenEdge Technical Support - KBases • Basic Guide to Defining Progress SQL Database Permissions & Security • Progress eLearning Community • Using OpenEdge SQL • Documentation • 10.1C OpenEdge Data Management: SQL Development • 10.1C OpenEdge Data Management: SQL Reference OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Relevant Exchange Sessions • OPS-27: Understanding Record and Table Locking In OpenEdge SQL • OPS-10: Moving V8/V9 RDBMS to OpenEdge 10 • OPS-15: What was Happening with My Database, AppServer, Operating System • OPS-18: Data Management and Platforms Roadmap • OPS-24: Success with OpenEdge Replication OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
? Questions OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC
Thank You OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC