* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download SELECT count(*) FROM customer
Entity–attribute–value model wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Microsoft Access wikipedia , lookup
Oracle Database wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Tandem Computers wikipedia , lookup
Database model wikipedia , lookup
Clusterpoint wikipedia , lookup
Relational model wikipedia , lookup
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 2 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge is Open ABL: (ABL works with relational DBs) .NET Java HTML Open Clients: Java™ .NET™ Web services Open Clients (Non-OpenEdge) SSL HTTP HTTP/S HTML Oracle® MSSQL ODBC 3 OpenEdge SQL (works with OpenEdge RDBMS) OpenEdge ABL Clients OpenEdge ABL Server OpenEdge DataServers Crystal Reports WebSphere® JBOSS / JRun Java / JDBC apps J2EE™ / JTA .NET / ODBC apps ADO.NET / VB ODBC Clients Service Interfaces JDBC Clients OpenEdge SQL Server OpenEdge RDBMS Data is fully interoperable: ABL & SQL © 2008 Progress Software Corporation Getting Connected – Client side: ODBC and JDBC drivers 4 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation JDBC driver Type 4 JDBC driver (10.1a+) CLASSPATH ( run ‘sql_env’) $DLC/java: openedge.jar, util.jar, base.jar Class loader com.ddtek.jdbc.openedge.OpenEdgeDriver URL jdbc:datadirect:openedge://localhost:6748;databaseName=db1 5 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation ODBC DSN – single connection 6 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation ODBC DSN Advanced Tab 7 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Isolation Level Affect on Lock Type Update Isolation Level Table Lock Record Lock Table Lock Record Lock --- --- NoLock NoLock IX Exclusive IS Share Repeatable Read IX Exclusive IS Share Serializable SIX Exclusive Share None Read Uncommitted Read Committed 8 Fetch OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation ODBC : Multi-DataBase configuration 9 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Connection – server side 10 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Default server settings SQL Servers SQL client Shared Memory SQL client SQL & ABL Broker Database ABL client ABL client 11 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC ABL Servers © 2008 Progress Software Corporation “Recommended” server setup SQL client SQL only Broker SQL Servers Shared Memory SQL client ABL client ABL client 12 ABL only Broker OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC Database ABL Servers © 2008 Progress Software Corporation Recommended parameters example Separating ABL and SQL brokers/servers … examples Example: Start a ABL Primary broker proserve Sports2000 -S 6000 -H localhost -n 45 -Mn 8 -Mpb 4 -ServerType 4GL -Mi 1 -Ma 5 -minport 6100 -maxport 6300 Example: Start a Secondary SQL broker proserve Sports2000 -S 5000 -H localhost -m3 –Mpb 3 -ServerType SQL –Mi 5 –Ma 5 -minport 5100 -maxport 5300 13 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Security Authentication Who am I? 14 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC Authorization What am I allowed to do? © 2008 Progress Software Corporation 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 15 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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 16 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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)” 17 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Comparing ABL & SQL Security Systems ABL 18 SQL Security model GRANT GRANT Default DBA n/a <db-owner> SYSPROGRESS Default security administrator “*” n/a Default table access “*” <none> Default field access “*” <none> OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Encountering errors Access denied (Authorization failed) (7512) Possible reason for this: • No authorization privileges • Schema scope 19 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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 20 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Authorization – What can I do? Privileges – Syntax: GRANT (2 types) Database wide (system admin or general creation) GRANT { DBA, RESOURCE } TO user_name [, user_name ] , …; For specified Tables or Views GRANT { privilege [, privilege ], … | ALL } ON table_name TO { user_name [, user_name ] , … | PUBLIC } [ WITH GRANT OPTION ]; – Where ‘privilege’ is: { SELECT | INSERT | DELETE | INDEX | UPDATE [ ( column , column , ... ) ] | REFERENCES [ ( column , column , ... ) ] } 21 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Encountering errors Table/View/Synonym not found (7519) Possible reasons for this: • Not authorized • Schema scope 22 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation What is a Schema? Mysports database PUB schema Customer table 23 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC AuxCat Database PUB bwerne Inventory © 2008 Progress Software Corporation 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’ SET SCHEMA ‘pub’ Another option: Synonyms: CREATE PUBLIC SYNONYM customer FOR pub.customer; 24 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Schema example SELECT count(*) FROM customer; Table/View/Synonym not found (7519) Solutions: SELECT count(*) FROM pub.customer; or SET SCHEMA ‘pub’; SELECT count(*) FROM customer; 25 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 4 Part Naming – Multi-Database Query Fully Qualified Names Four level naming convention catalog.schema.table.column-name Example SELECT Pub.Customer.CustNum, SportsPrimary.Pub.Customer.Name, SportsAux1.Pub.Order.OrderNum … ABL has 3 level naming convention catalog.table.column-name 26 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge Specifics SQL is a standard, but each vendor has it’s own dialect 27 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge Specifics - Quoting Non-SQLStandard names Hyphenated names: SELECT cust-num FROM PUB.Customer; Column CUST cannot be found (13865) Solution: quoting SELECT “cust-num” FROM PUB.Customer; 28 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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. 29 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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=selfservice >1=#threads)? 3 Padding % above current max: 25 30 <table>: (Table number or all)? all <area>: (Area number or all)? all OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge Specifics - Overstuffed fields Strategies for managing ABL client startup parameter -checkwidth <progress-client>.exe –checkwidth n where "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. 31 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge Specifics – Arrays / Extents Selecting array columns as a whole SELECT quarterlySales from PUB.MySales; Result: semi-colon separated varchar value 102332.67;330002.77;443434.55;333376.50 Selecting array column individually – SQL99 SELECT quarterlySales[1] from PUB.MySales; Result: numeric value 102332.67 32 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation OpenEdge Specifics – Arrays / Extents Strategies: Using views to break out array elements CREATE VIEW PUB.QuarterSales AS SELECT quarterlySales[1], quarterlySales[2], quarterlySales[3], quarterlySales[4] FROM PUB.MySales; SELECT * FROM PUB.QuarterSales; Result: numeric values 102332.67 330002.77 443434.55 333376.50 33 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Query Performance Q: What’s it gonna cost to run my query? TIME = 34 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation What is the cost? Database without statistics ABC Corp DB Customers Distributors Parts Suppliers 35 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC Orders OrderLines SalesHist Employees © 2008 Progress Software Corporation Basic Performance - What is the cost? Database with Update Statistics ABC Corp DB Customers SalesHist OrderLines Distributors Orders Parts Employees Suppliers 36 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Query Performance: Update Statistics UPDATE STATISTICS syntax All Statistics: Table Cardinality, indexes and all columns UPDATE TABLE STATISTICS AND INDEX STATISTICS AND [ALL] COLUMN STATISTICS; Statistics - particular table UPDATE TABLE STATISTICS AND INDEX STATISTICS AND [ALL] COLUMN STATISTICS FOR pub.customer; 37 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Query trees : Defined relational algebraic tree representation (query tree / execution tree ) Result set Data Database access 38 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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 ); 39 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Query plan – what to look for Simple single table select • “select … from pub.customer where custnum between 1000 and 1100 [NoExecute]” table index index keys, predicates 40 SELECT COMMAND. PROJECT [66] ( | PROJECT [64] ( | | PUB.CUSTOMER. [0]( | | | INDEX SCAN OF ( | | | | CustNum, | | | | | (PUB.CUSTOMER.CustNum) between (1000,1100)) OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation In Summary Initial SQL connection Setup and maintenance in OpenEdge database for security and performance Specifics of OpenEdge with SQL applications 41 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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 42 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 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 43 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation ? Questions 44 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation Thank You 45 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation 46 OPS-6: Beginners Guide to OpenEdge SQL via ODBC or JDBC © 2008 Progress Software Corporation