* 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