* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Welcome to TechWave 2006 SQL Anywhere Technical Summit Tracks 1 and 2
Tandem Computers wikipedia , lookup
Entity–attribute–value model wikipedia , lookup
Microsoft Access wikipedia , lookup
Oracle Database wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Ingres (database) wikipedia , lookup
Concurrency control wikipedia , lookup
Functional Database Model wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
ContactPoint wikipedia , lookup
Relational model wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Database model wikipedia , lookup
Clusterpoint wikipedia , lookup
Welcome to TechWave 2006 SQL Anywhere Technical Summit Tracks 1 and 2 Monday, August 7, 2006 Tuesday August 8, 2006 iAnywhere at TechWave 2006  Tech Support at TechWave 2006 • Meet with technical experts from Sybase iAnywhere and TeamSybase • Bring your technical questions and get answers on the spot! • Located off the Exhibit Hall on the fourth floor, Palace Ballroom Foyer  Ask the iAnywhere Experts • Drop in during support hours to have your questions answered by experts! • Appointments are available to speak one-on-one with Senior Engineers • Located across from the Tech Support area  TechWave-To-Go AvantGo Channel on your handheld device • Download the TechWave AvantGo channel for up-to-date details on sessions, events, maps and more • www.ianywhere.com/techwavetogo • Visit the AvantGo Kiosk on the 3rd floor 2 iAnywhere at TechWave 2006  Don’t miss the Feedback & Futures Session • Tuesday, August 8th 4:30 pm – 6:00 pm • Join us to wrap up of all summit sessions and provide feedback • Save your questions for dedicated time with all session presenters • Giveaways, prizes and more – your survey is your ballot!  Tuesday Night Event 8:00 – 10:00pm • Exclusive party for all 2-day Summit attendees • Pick up your ticket at the AvantGo Kiosk or the Feedback session • Must have your ticket + TechWave badge to enter the party 3 iAnywhere at TechWave 2006  Reference Program • Share your vision and innovation with your peers • Come by the Information Desk at the Sybase booth to complete a survey form -- all submissions will receive a gift!  iAnywhere Developer Community A one-stop source for technical information! • Access to newsgroups, new betas and code samples • Technical whitepapers, tips and online product documentation • Excellent resources for commonly asked questions • All available express bug fixes and patches • Network with thousands of industry experts http://www.ianywhere.com/developer 4 SQL Anywhere 10 Dave Neudoerffer VP Engineering, Sybase iAnywhere [email protected] Monday, August 7, 2006 1:00 pm – 2:30 pm Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 6 The Data Explosion in Frontline Environments • The landscape for where data is managed is changing… – – – – Enterprises are becoming more distributed, with global workforces Small & medium-sized enterprises are more sophisticated users of IT Large enterprises are increasingly mobilizing their workforces Software implementation and management is increasingly outsourced Packaged applications, hosting, 3rd party development • Front lines evolving into a mission-critical computing environment – – – – Server applications installed in an ISV’s customer sites Workgroup applications installed in retail outlets, remote offices ISV applications with databases hidden under the covers Mobile applications used by field workers and sales forces 7 At the Frontlines – Scenarios Desktop Server  Small & Medium Enterprise • Accounting • Administration  Solution packages • Phone systems • Point of sale  Remote office • Store management • Inventory control  Mobile • Traveling sales • Field service worker • Inspector … Remote office Mobile environments 8 SQL Anywhere is Unique  Built from inception to enable front line applications • Customers with server, desktop, mobile, remote office applications  Over 15 years of engineering of data management technologies for frontline environments • Running on laptops and desktops while other enterprise DBs were running in large data centers • First synchronization solution for mobile environments  Focus on making applications just as reliable, secure and available as those running in an enterprise HQ 9 SQL Anywhere 10 Components SQL Anywhere Self-managing relational database with high reliability, high performance out of the box, small footprint, and a full range of SQL features across a variety of platforms. UltraLite Database system for small devices, including Palm OS, Pocket PC, and Symbian, providing full transaction-processing support, a choice of development models, and synchronization with enterprise data stores. MobiLink Synchronization technology for sharing information among relational databases while maintaining the integrity of transactions across the entire system. QAnywhere Application-to-application messaging solution that delivers secure and assured message delivery for distributed and mobile users. 10 SQL Anywhere 10 Components SQL Remote Synchronization technology for synchronizing ASA remotes with ASA consolidated databases. Message based – direct connection not required. Sybase Central Management tool for ASA, UltraLite, MobiLink and SQL Remote. Uses a tree structure for easy manipulation and management of objects. Also includes a built-in stored procedure debugger. PowerDesigner Physical data modeller allows complete design of database schemas. It also provides facilities to reverse engineer the schema of an existing database and to generate SQL to create any schema you design. Infomaker A powerful and easy-to-use reporting tool that lets you query databases and create sophisticated and effective custom reports of data. DataWindow.NET Powerful control/component for .NET environments providing flexible broad range of data capabilities. 11 SQL Anywhere 10  Over 200 enhancements to both the Database Server and Database Synchronization components in 4 significant areas • Performance – Equipping customers to deal with data explosion – Pushing SQL Anywhere to 100’s of gig’s and 1000’s of users • Protection – Consequences of data loss are increasing – Push data protection, by theft or system failure, to higher levels • Productivity – Increasing developer productivity, improving ROI – New tools and enhancements for development, analysis and debugging • Innovative Data Movement - address increasing volume of data being exchanged with larger numbers of systems – New architecture design, integration and mobile Web Services tools 12 Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 13 Enhanced Data Management Performance - customers better equipped to deal with an explosion of data in frontline environments • • • • • • • Materialized views Snapshot isolation Intra-query parallelism Parallel backups New Index design New Storage format Column Compression • • • • • Checkpoint write behind Expressions Java VM New Catalog Random access to BLOBs 14 Materialized Views Functionality Benefits  Result of view stored as ordinary base table in database  Read-only  Can build indices on it  Can control frequency of refresh  Used in optimization  Enhanced query performance  Improved concurrency Usage Scenarios     When using large databases Expensive queries on devices with limited processing power When frequent queries result in repetitive aggregation (summing of data) When access to up-to-the-moment data is not a requirement 15 Snapshot Isolation Functionality Benefits   Mechanism to eliminate “blocking” of other readers when locks held Keeps copy of original data while it’s being changed for users who want to read it in the interim Also known as row versioning Enabled by global database option Can list currently active snapshots      Reduced locking  Readers don’t block readers  Readers don’t block writers  Writers don’t block readers  Better performance Ensure consistency in reporting applications Usage Scenarios  Cases where query “locks” are being held for long periods of time and preventing completion of query results for other users (blocking)  Long running batch jobs / reports while user queries being issued  Ex. Accounting Balance Sheet report  Statistical queries that “touch” a lot of rows  Stored procedures or logic holding transactions open for longer periods 16 Intra-query Parallelism Functionality  Use of multiple processors or cores for a single query  Parallel sequential scans, index scans, joins  NOTE: Do not confuse with inter-query parallelism (supported since SQL Anywhere V6) which allows multiple queries to execute in parallel Benefits   Can speed up CPU-bound queries Single client apps can benefit since server can exploit more than one CPU for each request Usage Scenarios   By default, engine automatically uses for benefit Option available to control its usage 17 Parallel Backups Functionality Benefits   Decreases overall time required for backups  Only bound by performance of slowest I/O component Supported through server-side image backups, dbbackup utility, db_backup function Independent I/O operations may be overlapped with each other (vs. performed sequentially)  Usage Scenarios   Especially useful for larger databases Internal tests showed up to 3-fold improvement in performance on 10GB database 18 Indexing Enhancements Functionality Benefits  New indexes (to support snapshot isolation)  Improved control over how indexes are created  Improvements to storing and tracking index information  Reduced contention on inserts  Improved concurrency leads to increased performance in multi-user environments  Can index BLOB data -> faster searching / retrieval Usage Scenarios    If a particular column is searched frequently Large tables with many rows Index Consultant tool assists you in appropriate selection of indexes for your database! 19 New Storage Format Functionality Benefits  Redesigned persistent storage format  Allows new indexes, snapshot isolation  Better placement of data on the disk  More efficient use of page storage  Faster sequential scans, row lookups Usage Scenarios  All ;-) 20 Enhanced Data Management Performance - customers better equipped to deal with an explosion of data in frontline environments • • • • • • • Materialized views Snapshot isolation Intra-query parallelism Parallel backups New Index design New Storage format Column Compression • • • • • Checkpoint write behind Expressions Java VM New Catalog Random access to BLOBs 22 Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 23 Enhanced Data Management Protection - pushing data protection, whether from theft or system failure, to even higher levels as consequences of data loss in frontline environments grow in importance  High Availability (Hot Failover) • Database Mirroring • Cluster agent  FIPS 140-2 validated security  Table level encryption     Resource governors RSA encryption included Kerberos authentication New authorities added • BACKUP and VALIDATE  Server lockdown to disable database server features or groups of features • Eg. local_call 24 High Availability – Database Mirroring Functionality Benefits  Servers communicating with each other to increase availability of DB • Primary – current active server • Mirror – current standby server • Arbiter – determines primary  Maintain separate copies of db / logs  Clients only see (connect) to 1 server  Protection of data against system failure  Very easy to setup (built-in)  No special hw or sw requirements  Does not require particular OS  Little impact on server performance  Failover automatic, fast Usage Scenarios   For highest levels of data protection against system failure (eg if you require 24 x 7 availability) Use Mirroring if you want something built into the server with no requirement for third-party software 25 High Availability – Database Mirroring Arbiter determines who is the current active server (also known as primary server) Arbiter Server 26 High Availability – Cluster Support Functionality Benefits  Custom agent for Veritas Cluster Service (VCS)  Set of scripts integrated into VCS install  One node goes down, automatic failover to another node with no intervention required (eg. shared disk)  Cluster support existed before Jasper but now more “SQL Anywhere-aware”  Protection of data against system failure  Can leverage existing Veritas Cluster Server (VCS) installations  More control over how/when failover for database server occurs  Can failover a server, or a database on a server Usage Scenarios   For highest levels of data protection against system failure (eg if you require 24 x 7 availability) Use VCS Cluster Agent if you are already a VCS shop 27 FIPS 140-2 Validated Security Functionality Benefits  Strong encryption components have been FIPS 140-2 validated  Extended to multiple platforms beyond Windows including Linux and Solaris  FIPS 140-2 validation provided without having to go through lengthy and costly FIPS approval process yourself Usage Scenarios  Government agencies, financial institutions, healthcare providers requiring FIPS 140-2 validation of any strong encryption components 28 Table Level Encryption Functionality Benefits  Ability to encrypt individual tables vs. the complete database  Enabled through simple database option  Allows database users finer granularity on security control  Reduces overhead of encrypting / decrypting non-sensitive data in database Usage Scenarios  Companies (eg. government agencies, financial institutions, healthcare providers) requiring more granularity on strong encryption components 29 Enhanced Data Management Protection - pushing data protection, whether from theft or system failure, to even higher levels as consequences of data loss in frontline environments grow in importance  High Availability (Hot Failover) • Database Mirroring • Cluster agent  FIPS 140-2 validated security  Table level encryption     Resource governors RSA encryption included Kerberos authentication New authorities added • BACKUP and VALIDATE  Server lockdown to disable database server features or groups of features • Eg. local_call 30 Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 31 Enhanced Data Management Productivity - enhanced developer productivity tools to decrease implementation time of mission critical frontline applications  Performance Analysis and Application profiling  Visual Studio Integration  .NET 2.0 Support  SA Deployment Wizard  UltraLite Enhancements  Global shared temporary tables  Temporary procedures  Task based administration  Admin tool system wide search capabilities  Product wide exception reporting and statistics gathering  Internationalization • Extended multi-byte and Unicode character sorting • NCHAR data type  Interfaces and Tools • JDBC 3.0 support in iAnywhere JDBC driver • JConnect 6 • IPV6 support  File/Directory data via external tables 32 Performance Analysis and Application Profiling Functionality Benefits  Robust tool for app and db performance troubleshooting  Problem determination for: • Concurrency issues • Pinpointing of queries with suboptimal performance • Server machine capabilities  Increased developer productivity  Flexible • “Off-line” analysis • Remote machine analysis  Decrease risk of performance related issues before deployment Usage Scenarios  Performance trouble-shooting tool aimed at 3 different classes of users: • Beginner DBA (wizard-based) • Experienced DBA (wizard and tracing database) • Power-User DBA (attach tracing feature) 33 Performance Analysis and Application Profiling 34 Enhanced Visual Studio 2005 Integration Functionality Benefits  SQL Anywhere Explorer • Create connections to SA dbs • Browse contents of tables / columns • Toolbar to launch SA tools • Drag-and-drop operations to populate forms with controls  Supports VS 2005 and VS 2003  Installed within VS by default  VS developers continue to work in development environment they are comfortable with  Leverage existing knowledge of Server Explorer  SQL Anywhere developers have easy access to tools within VS environment Usage Scenarios  Large Visual Studio developer base with requirement to extend database applications to the “front-lines”  Looking for more powerful alternative to SS Mobile / Express  May be part of heterogeneous replication environments 35 .NET 2.0 Support Functionality Benefits  ADO.NET preferred data access component for .NET apps  .NET 2.0 released with VS2005  Jasper includes native SA .NET 2.0 provider  SA supports .NET 2.0 and 1.1  DataWindow.NET included  Superior performance (native access, no bridge technology required)  Supports .NET 2.0 key features  Broad Microsoft Windows support (including Windows Mobile)  DW.NET provides powerful extensions to VS data grid support Usage Scenarios   Existing .NET development shops DataWindow.NET for programmers looking to easily incorporate complex business rules and deliver sophisticated data presentation in their datadriven applications 36 Deployment Wizard Functionality Benefits  Easy-to-use SA deployment tool – from list, just “pick and choose” SA components to deploy  Generates a Microsoft Windows installer file (.MSI)  Provides alternative to other deployment methods (silent, custom-built installs)  Developer productivity – minimizes time to embed SQL Anywhere into application Usage Scenarios   OEMs that need to embed SQL Anywhere Environments that require hundreds / thousands of deployments 37 UltraLite Enhancements        Single file format across all platforms Access from SA admin tools: DBISQL, Sybase Central FIPs-approved security Bigger database support (now 16 million rows per table) Smaller footprint (as small as 300k) when not using SQL Predicates on sync publications Platforms: • Symbian OS 7,8 – Series 60, 80, UIQ 2.0 and 2.1 – C++, AppForge development • Windows Mobile 5 38 UltraLite Enhancements  Extended Dynamic SQL and db management • Distinct on aggregates • UNION • constraint names, asc/desc in column lists for fkeys/unique constraints • START AT • Updatable cursors • More properties accessible through functions • Integrated schema (system tables)  Complete DDL support  AppForge Crossfire support 39 Enhanced Data Management Productivity - enhanced developer productivity tools to decrease implementation time of mission critical frontline applications  Performance Analysis and Application profiling  Visual Studio Integration  .NET 2.0 Support  SA Deployment Wizard  UltraLite Enhancements  Global shared temporary tables  Temporary procedures  Task based administration  Admin tool system wide search capabilities  Product wide exception reporting and statistics gathering  Internationalization • Extended multi-byte and Unicode character sorting • NCHAR data type  Interfaces and Tools • JDBC 3.0 support in iAnywhere JDBC driver • JConnect 6 • IPV6 support  File/Directory data via external tables 40 Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 41 Innovative Data Movement  Synchronization Modelling Tool • “ Point-and-click” setup, testing and deployment of synchronization systems  Flexibility and Performance • Direct row handling for sync to virtually any data source • Script based uploads for SA (in addition to log scanning) • Global connection scripts • Named parameters in SQL scripts • Download only publications • FIPS approved security option – extended platform support  Messaging • Message management and monitoring • Performance improvements and additional API support • Mobile Web services 42 7 Manageability – MobiLink Administration Functionality Benefits  New plug-in for Sybase Central  Intuitive wizard-based approach to create model of entire sync solution  Simulation and testing of sync scenarios  Script generation  Easy deployment and generation of remote databases  Developer productivity - ability to quickly setup and maintain a MobiLink sync environment against all supported consolidated and remote databases Usage Scenarios    Fast, easy development of initial synchronization system New users to synchronization Also useful for prototyping, proof-of-concepts, pilot programs that require quick implementation 43 New MobiLink Administration 44 Direct Row Handling on Sync Functionality Benefits  Synchronizing to data sources other than supported consolidated dbs  Implemented using new MobiLink server APIs for Java and .NET  Generates download data, model passes data to MobiLink for delivery to remote device  Sync directly without requirement for staging database  Flexibility – increases # of potential data sources (relational and non) that can participate in ML sync  Leverage existing knowledge • .NET, Java, SQL Usage Scenarios  Requirement to sync directly with enterprise systems including:  ERP Systems (SAP, Siebel, PeopleSoft, …)  Web Servers (IIS, Apache, …), Application Servers (WebLogic, WebSphere …)  Legacy Systems (Mainframes, …), Data Warehouses (Sybase IQ, ….)  Non-Standard Relational Database (MySQL, Excel, Access, …)  Messaging Servers (MQ Series, Netscape Messaging Server, …) etc… 45 Performance Enhancements Functionality Benefits  New threading model  Initial handshake - decoupling of authentication and data upload  Data compression  Schema caching  Enhanced communication architecture  Persistent connections  Avoids large uploads if authentication fails  Reduces amount of time and cost (when charges apply) of moving data  Eliminates redundant data transmission as schema rarely changes  Better throughput (performance), error detection, compression, maintainability Usage Scenarios  Any MobiLink implementations – small or large – can take advantage of performance gains 46 QAnywhere Message Management and Monitoring Functionality Benefits  Sybase Central plug-in • Browse client/server msg store - examine message properties, status, and history • Forward, delete, or export messages • View and modify message store properties • View and create agent command files • View and create transmission rules  Better development-time debugging  Better runtime exception investigation Usage Scenarios  Developers implementing and maintaining messaging solutions using QAnywhere 47 QAnywhere Performance and API Support Functionality Benefits  Optimized message overhead  Additional API support: • Currently C++ • New SQL stored procedure interface to messaging • New Java API  Reduction in amount of data sent (lower cost, better performing applications)  More efficient handling of interrupted connections  Exposes messaging paradigm to developers more comfortable with SQL / Java Usage Scenarios   All developers implementing and maintaining messaging solutions can take advantage of performance improvements SQL shops who want to implement messaging 48 Mobile Web Services Functionality Benefits  Built on top of QAnywhere architecture  Web services can be invoked from mobile applications using traditional tools and techniques  Requests and responses handled by QAnywhere  Allows SOA applications to be extended to mobile environments  Asynchronous web services with reliability and efficiency over nonpersistent connections Usage Scenarios   Integration with backend systems that make use of web services Using web services in an occasionally connected environment 49 Innovative Data Movement  Synchronization Modelling Tool • “ Point-and-click” setup, testing and deployment of synchronization systems  Flexibility and Performance • Direct row handling for sync to virtually any data source • Script based uploads for SA (in addition to log scanning) • Global connection scripts • Named parameters in SQL scripts • Download only publications • FIPS approved security option – extended platform support  Messaging • Message management and monitoring • Performance improvements and additional API support • Mobile Web services 50 7 Agenda  SQL Anywhere 10 Enhancements • • • • Performance Protection Productivity Innovative Data Movement  Release Notes 51 SQL Anywhere 10 Platform Changes  SQL Anywhere • Solaris Sparc, HP-UX, AIX – New 64-bit servers only – 32-bit and 64-bit client support • Mac support - Intel only (no current plans for PPC) • Dropping support – Windows 95/98/ME/NT 4.0 – Compaq TRU64  UltraLite • Adding Symbian Series 60, Series 80, UIQ 2.0 and 2.1 • Dropping MIPS support 52 MobiLink Changes  Consolidated Databases Supported • • • • • SQL Anywhere 10 Sybase ASE 12.5.2, 12.5.3, 15 Microsoft SQL Server 2000, 2005 IBM DB2 UDB 8.1 Oracle 9i, 10g 53 SQL Anywhere 10 Database Format Support  Prior to V10, new SQL Anywhere releases supported database formats of previous releases  In V10, only V10-format databases are supported • Decision made after consultation with many customers • Enables us to offer new features such as Snapshot Isolation • Enables many performance enhancements  Important notes • • • • Faster parallelized unload/reload utility will ease migration Application level compatibility will not be affected Older SQL Anywhere clients will continue to work Synchronization compatibility will not be affected 54 Conclusion  With version 10 of SQL Anywhere, we have raised the bar once again in providing developers with an underlying data management, synchronization, security, and integration architecture that addresses the complexities unique to frontline environments. QUESTIONS? 55 14 Upgrading to SQL Anywhere 10 Joshua Savill Product Support Analyst, Sybase iAnywhere [email protected] Monday, August 7, 2006 2:45 pm - 4:15 pm Objectives for Presentation  Overview of how to upgrade current databases and applications to SQL Anywhere 10  Demonstration and explanation of SQL Anywhere tools used during the upgrade process  Discuss behaviour changes and considerations during the upgrade process  Introduce new features to consider while upgrading 58 Agenda for Presentation       Overview of the Upgrade Process Upgrading to SQL Anywhere 10 Upgrading the MobiLink Server Upgrading MobiLink Clients Upgrading UltraLite Upgrading QAnywhere 59 Agenda for Presentation  Overview of the Upgrade Process • Components involved in upgrading • Advantages of upgrading • Upgrading best practices      Upgrading to SQL Anywhere 10 Upgrading the MobiLink Server Upgrading MobiLink Clients Upgrading UltraLite Upgrading QAnywhere 60 Components to Upgrade  Upgrading can involve multiple layers and components • Components may depend or rely on other component being upgraded • Front-end application • Operating system • Hardware • SQL Anywhere software • Database File ( Consolidated/Remote )  MobiLink  UltraLite  QAnywhere 61 Information on What’s New in SQL Anywhere 10  Could be upgrading from version 5.X, 6.X, 7.X, 8.X, or 9.X to SQL Anywhere 10  Each new release has new features and behavior changes  Full details provided in the SQL Anywhere 10.0.0 documentation  Additional resources provided in the Technical Support Lounge 62 Advantages of Upgrading  Platform support • Operating system support is most current with active supported versions of SQL Anywhere • Upgrading to move from an inactive or archived version onto a supported version ( http://www.ianywhere.com/products/supported_platforms.html )  Performance improvements • Query processing, multi-processor, memory management, improved communications  New and enhanced features • Hardware upgrades that can make use of new features – High availability or clustering • • • • Snapshot isolation Materialized views NCHAR data type support Application profiling and diagnostic tracing 63 Upgrading Best Practices  Review new behavior changes  SQL statements in older versions may not be supported in SQL Anywhere 10 • More restrictive due to ANSI compliance • Coding to a bug • Test upgrading to SQL Anywhere 10 before rolling out  Always make a full backup and validate database before and after the upgrade process  Benchmark performance • Check the PLAN() function for key queries • Measure performance of application with the database – Start with default database settings, then make changes to improve performance, if necessary 64 Upgrading Best Practices Con’t  Revisit performance with upgraded database server • Review how some queries are written to determine efficiency • Index Consultant for suggestions on schema improvements  Test application • Fix bugs • Improvements in compliance to standards • Could be unexpected side effects – Application may have been coded to a bug – Reliance on non-static features E.g. Error message text 65 Upgrading Best Practices Con’t  Test upgrade procedure in a development environment that is identical to the production environment  Verify command line and installation path if multiple versions of SQL Anywhere are installed ( utilities exist in multiple versions )  Review installation plan  Upgrading SQL Remote, MobiLink Client, MobiLink Server and UltraLite • These components may have a dependency on SQL Anywhere ( formerly Adaptive Server Anywhere ) • UltraLite may have dependency on MobiLink • Replicate or synchronize all databases before upgrading  Upgrading QAnywhere Client • MobiLink and SQL Anywhere upgrade is required 66 Agenda for Presentation  Overview of the Upgrade Process  Upgrading to SQL Anywhere 10 • New database file format • New feature notes • How to upgrade to SQL Anywhere 10  Upgrading the MobiLink Server  Upgrading MobiLink Clients  Upgrading UltraLite  Upgrading QAnywhere 67 Name Changes  Adaptive Server Anywhere  SQL Anywhere • Changes to some binary file names – dbmlsrv9.exe  mlsrv10.exe • Environment variable name changes – ASANY9  SQLANY10 • Driver name changes – .NET, OLE-DB, Perl DBD Provider/Driver renamed • Default installation directory changed to SQL Anywhere 10 • Sample database name, data and schema changed ( demo.db ) • Unix/Linux configuration script asa_config.sh renamed to sa_config.sh 68 New Database File Format  Requires that database files be rebuilt using the Unload utility ( dbunload.exe )  Old database file formats cannot be started on a SQL Anywhere 10 engine  New file format allows for new features that cannot be implemented with the older format • Snapshot isolation • Improved Unicode data support • BLOB performance enhancements  More flexibility in adding new features • Catalog, fixed-length columns, concurrency, international support  Performance • Support added for parallelism to improve performance – Using multiple processors for processing a single query 69 New Database File Format  Reduced code complexity • More efficient code in the database server – Increased stability as code line is more efficient • Easier to maintain code line and ability to add new feature not capable when supporting old database file formats  The Upgrade utility ( dbupgrad.exe ) will not be shipped with SQL Anywhere 10  The Unload utility will be able to read older file formats • The upgrade process will include a special engine for the Unload utility to read older databases ( dbunlspt.exe ) 70 Catalog and Reserve Word Changes  Catalog changes • Catalog names now start with an I ( ISYSFILE, ISYSOPTION ) • Benefits – More Efficient/Faster to access – Flexibility for updating catalog without affecting applications – Compatibility views for previous catalog included • Applications relying on following may need to change – SYSINFO*, SYSATTRIBUTES, *SYSCOLLATION, *SYSCOLLATIONMAPPINGS, *SYSUSERPERMS, *SYSUSERPERM *Deprecated  Catalog table names have changed, but views for backwards compatibility Additional reserved words for SQL Anywhere 10 • Caution needs to be taken if reserved words are used in scripts 71 International Language Support  Support for international languages has been enhanced • International Components for Unicode ( ICU ) libraries introduced • Unicode Collation Algorithm ( UCA ) added for sorting the entire Unicode character set – More CPU intensive, but can sort most languages in an appropriate order  New NCHAR support added • Used to store Unicode character data up to 8191 characters in length • NVARCHAR ( 8191 characters maximum ) and LONG NVARCHAR ( 2 GB maximum ) • Default collation is UCA 72 Database Collation Additions  New database collation added • Norwegian 1252NOR, default on Norwegian Windows systems • UTF8BIN added for improved sorting of binary data – UTF8 deprecated  The Collation utility has been deprecated • DBCollate function and dbcollat.exe removed • Creation of custom collations is no longer supported • Custom collations are preserved in the database when upgrading  Affects on existing applications • SORTKEY functionality is still supported • COMPARE functionality is still supported • Deployment of ICU library may require addition files in the deployment list 73 ANSI Compliance  SQL Anywhere 10 complies completely with the SQL-92-based United States Federal Information Processing Standard Publication ( FIPS PUB ) 127  With minor exceptions, SQL Anywhere 10 complies with ISO/ANSI SQL-2003 core specifications  Substring() function now conforms to ISO/ANSI SQL-2003 • Negative or zero start offset is now treated as if the string is padded on the left with non-characters • Gives an error if negative length is provided • ansi_substring option provided for compatibility  Integer overflow now produces a SQLSTATE = 22003 overflow to conform to ISO/ANSI SQL-2003 • ansi_integer_overflow option provided for compatibility 74 ANSI Compliance  string_rtruncation option default is changed to ON • Data truncation by database engine now causes error by default  Further ANSI compliance questions are welcomed in the Technical Support Lounge 75 Java Virtual Machine Enhancements  Initialized databases are always Java enabled  iAnywhere Virtual Machine deprecated • Previously SQL Anywhere shipped an iAnywhere Virtual Machine • SQL Anywhere 10 uses an external VM – External VM will run in its own process space – Java logic not affected – Can make use of any external Java VM • Benefits – Expected better performance – Immediate support of new versions of Java – No longer a separate key to install • New options – java_location ( no default ) – Java_main_userid ( default dba ) 76 Connection and Security  iAnywhere JDBC driver supports JDBC 3.0  jConnect 5.5 and 6.0 are shipped with SQL Anywhere 10 • jConnect 4.5 is no longer supported  Support for IPv6 on Windows XP, Windows 2003, and Linux  -sc switch for C2 security is no longer supported • Common Criteria is more comprehensive/up-to-date • Named Pipes no longer supported  RSA now included with SQL Anywhere 10  Enhancements to FIPS support 77 Target Platform Support  Platforms Targeted in SQL Anywhere 10 • Windows 2000, XP, 2003 – Remove support for Windows NT 4.0, 95, 98, ME • Linux Kernel minimum 2.6.5 • Solaris 8, 9 and 10 – Solaris 7 not supported • NetWare 5.1 (sp6), 6.0 (sp3) and 6.5 • Mac OS X PPC replaced in favour of Mac Intel • Windows CE 3.0, 4.1, 4.2, Windows Mobile 5.0 • Support for 486 chipset removed • 64-bit Database Servers on AIX, HPUX and Solaris in place of the 32-bit servers 78 How to Upgrade to SQL Anywhere 10  Backup and validate the existing database  Shutdown all other SQL Anywhere database servers  The Unload utility or Unload Database wizard will rebuild the database file format into SQL Anywhere 10 79 Upgrade Restrictions  Recommend to disconnect from any earlier versions of the database server and shut all other database servers  Do not include the ENG, START, or LINKS connection parameters in the dbunload connection string or enter the Server Name and Start Line fields in Sybase Central connection dialog box  The Unload utility must be run on the same machine where the database file is located as a shared memory connection is required  Environment variables SATMP and ASTMP must be set to the same value, or not set at all  Netware database need to be rebuilt on a Windows or Unix machine 80 Special Considerations  Passwords in newly created SQL Anywhere 10 database are case sensitive regardless of case-sensitivity of the database  Rebuilding an existing database, case sensitivity of the database is as follows • If password was originally entered in case-insensitive database, password remains case-insensitive • If password was originally entered in case-sensitive database, uppercase and mixed case passwords remain case-sensitive, lowercase passwords become case-insensitive • Newly created passwords are case-sensitive  Default pages size is 4096 bytes  Collations from old database are unloaded and reused unless otherwise specified 81 Rebuilding into SQL Anywhere 10  The Unload Database wizard in Sybase Central  The Unload utility  Ability to create a new database, replace the existing database with the new file format, or unload the database to flat files  Required to rebuild the database into SQL Anywhere 10 82 The Unload Database Wizard in Sybase Central  Starting the Unload Database wizard • Start Sybase Central and click ‘Prepare a Version 9 or Earlier Database for SQL Anywhere 10’ or select Tools  SQL Anywhere 10  Unload Database • Demo on how to use the Unload Database wizard in Sybase Central 83 The Unload Utility ( dbunload.exe )  Not all dbunload options apply when upgrading the database to SQL Anywhere 10  -c • Specifies connection parameters for the source database • For upgrading the database do not use the ENG, START, or LINKS connection parameters • The user ID supplied needs to be DBA authority  -an <filename> • Creates a new SQL Anywhere 10 database from the existing database ( original database file is preserved ) • Initialization options are not changed during the rebuild 84 The Unload Utility Con’t • When rebuild is complete, new dbspaces will have the extension .dbR • This option does not preserve the offsets for replication or synchronization  -ar <directory> • Creates a new SQL Anywhere database to replace the existing database ( original database file is not preserved ) • The directory name provided must contain the old transaction logs for replication or synchronization • When rebuild is complete, new dbspaces will have the extension .dbR • This option preserves the offsets for replication or synchronization • When rebuilding an encrypted database, the encryption key for the original and new database must be the same 85 The Unload Utility Con’t  -o <filename> • Writes output messages to the supplied file name  -r <[directory\]filename> • Modify the name and directory of generated reload script file  -v • Displays verbose output during the database unload – Name of the tables being unloaded – Number of rows being unloaded 86 Upgrading to SQL Anywhere 10 Examples Example # 1 dbunload -c “UID=dba;PWD=sql;DBF=asademo.db” -ar c:\temp In current directory before running dbunload: asademo.db asademo.log In current directory after running dbunload: asademo.db 87 Upgrading to SQL Anywhere 10 Examples Con’t Example # 2 dbunload -c “UID=dba;PWD=sql;DBF=asademo.db” -an c:\newdb\newdb.db In current directory before running dbunload: asademo.db dbspace1.db asademo.log In newdb directory after running dbunload: newdb.db newdb.log 88 Upgrading to SQL Anywhere 10 Examples Con’t In current directory after running dbunload: asademo.db dbspace1.db asademo.log dbspace1.dbR 89 Upgrading to SQL Anywhere 10 Examples Con’t Example # 3 dbunload -c “UID=dba;PWD=sql;DBF=asademo.db” c:\backup In the current directory before running dbunload: asademo.db asademo.log In the current directory after running dbunload: asademo.db asademo.log reload.sql \backup\*.dat 90 Upgrading to SQL Anywhere 10 Examples Con’t dbinit newdb.db dbisql -c “UID=dba;PWD=sql;DBF=newdb.db” reload.sql In the current directory after running dbinit and dbisql: asademo.db asademo.log newdb.db newdb.log The reload.sql and \backup\*.dat files can be removed 91 Agenda for Presentation  Overview of the Upgrade Process  Upgrading to SQL Anywhere 10  Upgrading the MobiLink Server • Consideration during upgrade • Upgrading the consolidated database • New feature notes  Upgrading MobiLink Clients  Upgrading UltraLite  Upgrading QAnywhere 92 MobiLink Upgrade Process  Dependent on whether the database file will be new or upgraded  Often customers deploy a new application with a new synchronization environment  Typically upgrades are done in stages/phases • Script versioning to accommodate an upgrade in stages/phases  Important to have all remote databases synchronized before starting the upgrade process  Validate and backup the database before staring upgrade process  Test the upgrade process in an environment that is equivalent to the production environment 93 Upgrading the Consolidated Database  Setup script required to run on consolidated database before being upgraded ( including SQL Anywhere 10 database ) • Appropriate upgrade script can be found in the %SQLANY10%\MobiLink\upgrade\ directory • Newly created consolidated database require the appropriate setup script found in the %SQLANY10%\MobiLink\setup\ directory – By default, MobiLink system tables are no longer created in the database during initialization  Ability to use a user other than the DBA to start the MobiLink server • Grant permission to the user on the necessary MobiLink system tables 94 MobiLink System Table Changes  New MobiLink server system tables and schema • ml_database, ml_column, and ml_qa_clients system tables added • Altered schema to the ml_subscription, ml_user, ml_script, ml_listening and ml_sis_sync_state tables  New ways to clean up the MobiLink system tables on the consolidated database • ml_delete_sync_state_before system procedure added – Purges information about obsolete remote databases • ml_delete_sync_state system procedure added – Deletes unused or unwanted synchronization state information • ml_reset_sync_state system procedure added – Resets synchronization state information 95 MobiLink Server Changes  MobiLink server name has changed from dbmlsrv9 to mlsrv10 • Many MobiLink utilities have dropped the db and added ml if there was no ml already in the name • MobiLink DLLs have also changed naming conventions  Compatibility with existing software • SQL Anywhere 10 MobiLink server has the ability to synchronize with version 8, 9 and 10 clients • mlsrv10 -xo option needed to synchronize version 8 and 9 clients  Options for setting cache size are deprecated ( -bc, -d, -dd, -u ) • Replaced with the mlsrv10 -cm option 96 Script Changes  upload_cursor, new_row_cursor, old_row_cursor scripts are deprecated and replaced with statement based uploads  Statement based uploads are easier to understand for most developers and offer better ODBC driver support • Better performance with statement based scripts  New MobiLink Create Synchronization Model wizard generates scripts • • • • • Script generation with timestamps Shadow table generation Deployment features GUI for column mappings Automatic script generation with the -za and -ze options has been deprecated 97 Script Changes  Unrecognized scripts will now cause synchronization to fail • Unrecognized table-level or connection-level scripts • Presence of cursor-based upload scripts  Errors in upload or download scripts will now cause synchronization to fail  When a begin script is called, the corresponding end script is called regardless of the success of synchronization  Upload scripts are not called for a table when there is no data to synchronize  Global script version added • Can define a script that is automatically used in all synchronizations unless another script is specified • Avoids duplicate connection level scripts 98 Script Changes  Named script parameters can now be used • Can use predefined named parameters or create user defined named parameters For Example: Select * from worktable where last_modified > { ml s.last_download } and owner = { ml s.username }; Instead of the following: Select * from worktable where last_modified > ? and owner = ? 99 Script Changes  Using SQL Anywhere 10 and Microsoft SQL Server 2005 consolidated databases, the isolation level should not be changed in the begin_connection script • Default isolation level for downloads is now snapshot • Changes to the isolation level for downloads should be in the begin_download script or using the new mlsrv10 -dsd option to disable snapshot isolation • Changing the isolation level in the begin_connection script is still good practice for consolidated databases that do not use snapshot isolation 100 Protocol Enhancements  Changes to protocol names and options for network security • -x https_fips changed to -x https(fips=y;...) – HTTPS with FIPS • -x rsa_tls changed to -x tls(tls_type=rsa;...) – TCP/IP with TLS using RSA encryption • -x rsa_tls_fips changed to -x tls(tls_type=rsa;fips=y;...) – TCP/IP with TLS using RSA encryption and FIPS • -x ecc_tls changed to -x tls(tls_type=ecc;...) – TCP/IP with TLS using ECC encryption • -x tcpip(security=...) changed to -x tcpip – TCP/IP • -x http(security=...) changed to -x http – HTTP 101 Error Handling  handle_error and handle_odbc_error events are more restrictive • Called only when an ODBC error occurs while MobiLink is processing an insert, update, or delete script during the upload transaction, or is fetching download rows • If an ODBC error occurs during other times of the synchronization, the MobiLink server will call the report_error or report_odbc_error script and abort the synchronization 102 Target Consolidated Platform Support  Targeted Consolidated Database Vendors • SQL Anywhere 10 • Sybase ASE 12.5.2, 12.5.3, 15.0 – Windows, Linux • Microsoft SQL Server 2000, 2005 • Oracle 9i and 10g – Linux, Windows, Solaris • IBM DB2 UDB 8.1 – AIX, Linux, Windows 103 Suggested ODBC Drivers  Sybase ASE and IBM DB2 ODBC Drivers are not shipped with SQL Anywhere 10 • DB2 and ASE Version 12.5.3 and above include ODBC drivers, which are the recommended drivers  Oracle ODBC Drivers • Data Direct driver ( Wire Protocol ) will be available for download for the SQL Anywhere 10 GA release • New iAnywhere Solutions 10 - Oracle ODBC Driver is being developed and will be available after the SQL Anywhere 10 GA release Recommended Drivers: ( http://www.ianywhere.com/developer/technotes/odbc_mobilink.html ) 104 Preparation  Review upload scripts and remove any upload cursor scripts • Replace with statement based upload scripts  Review database schema to determine if changes are needed in the synchronization definitions  Review the script versions and determine if there needs to be changes • New script versions are recommended if synchronizing older client ( version 8 or 9 ) with version 10 clients  If moving from version 7, review address parameter ordering  Evaluate binary name changes and ensure the proper version of the utilities are being used  Test all scripts prior to upgrading to the new version 105 Execution Plan  Stop the MobiLink server running on the consolidated database  Backup and validate the consolidated database  Identify the consolidated database type ( Oracle, IBM DB2, SQL Anywhere, etc )  Execute the appropriate upgrade script in the upgrade folder • E.g. %SQLANY10%\MobiLink\upgrade\9.0.0\upgrade_ora.sql if running an Oracle consolidated with version 9.0.0 • Note DB2 has special requirements     Upgrade the consolidated database Make any script changes based on the preparation items Assemble command line based on the preparation Start the MobiLink server with the appropriate command line 106 Agenda for Presentation     Overview of the Upgrade Process Upgrading to SQL Anywhere 10 Upgrading the MobiLink Server Upgrading MobiLink Clients • Consideration for upgrade • New feature notes • Upgrading remote databases  Upgrading UltraLite  Upgrading QAnywhere 107 MobiLink Clients Upgrade Process  Upgrading the software • Recommended to upgrade the MobiLink client and SQL Anywhere database at the same time – Remote database must be upgraded before running the new dbmlsync utility for SQL Anywhere 10  Upgrading the remote database • Synchronize all outstanding data • Rebuilding the database into SQL Anywhere 10 • Schema changes or significant database changes will require a manual rebuild of the remote database 108 User Name and Remote IDs  MobiLink user names and remote IDs • Unique remote IDs are now created for each remote database involved in synchronization – MobiLink user name no longer needs to be unique – MobiLink user name can now be considered a true user name for authentication 109 Deprecated Behaviour  Download error hooks deprecated • sp_hook_dbmlsync_fatal_sql_error and sp_hook_dbmlsync_sql_error have been removed  Version 7 syntax and utilities have been deprecated • • • • MobiLink client database extraction utility ( mlxtract ) CREATE SYNCHRONIZATION SITE statement CREATE SYNCHRONIZATION DEFINITION statement CREATE SYNCHRONIZATION TEMPLATE statement 110 Preparation  Review database schema to determine how to upgrade the database • No schema changes, the remote database can be upgraded using the Unload utility • Schema changes or significant database changes will require the database be manually upgraded  Review the script versions used by the remote database • May need multiple script versions if planning to synchronize older clients  Evaluate binary name changes and ensure the proper version of the utilities are being used  Test all scripts prior to upgrading to the new version 111 Execution Plan 1  Creating a new remote database if schema change or significant database changes are required • Start with an existing SQL Anywhere database, or create a new one and add the necessary tables • Create one or more publications in the remote database – CREATE PUBLICATION statement • Create the MobiLink users in the remote database – CREATE SYNCHRONIZATION USER statement • Register users with the consolidated database – mluser authentication utility • Subscribe MobiLink users to one or more of the publications – CREATE SYNCHRONIZATION SUBSCRIPTION statement 112 Execution Plan 2  Upgrading using the Unload utility to rebuild the database into SQL Anywhere 10 • All data should to be synchronized before upgrading the database • Backup and validate the database before upgrading dbunload -c “UID=dba;PWD=sql;DBF=asademo.db” -ar c:\temp  MobiLink remote databases require the -ar option to automatically rebuild the database • Transaction log offsets need to be preserved for synchronization purposes • Extremely important to backup and validate the database before attempting an upgrade – Automatic rebuild will replace the existing database file 113 Execution Plan 3  Upgrading using the Unload utility to rebuild the database into SQL Anywhere 10 but manually preserving the transaction log offset • • Perform a successful synchronization, validate and backup the remote database Run the dbtran.exe utility to display the starting offset and ending offset of the database transaction log – • Rename the transaction log and ensure that it is not modified during the unload process – • • Make note of the ending offset as it is required Move the renamed log file to a secure location, such as an offline directory Unload the database Initialize a new database 114 Execution Plan 3 Con’t • • • • Reload the data into the new database Shut down the new database Erase the transaction log of the new database Run dblog.exe on the new database to reset the transaction log offsets – Use -z to specify the ending offset that was recorded – Use -x to set the relative offset to zero E.g. dblog -x 0 -z 137829 database-name.db • Start dbmlsync, specifying the location of the original log file that was moved to the secure location • When the old transaction logs are no longer needed, set the database option delete_old_logs 115 Upgrading SQL Remote  SQL Anywhere 10 replication will work pre-SQL Anywhere 10 SQL Remote clients provided new data types are not introduced in the system ( NCHAR )  Recommend to migrate to MobiLink if using SQL Remote for ASE ( http://www.ianywhere.com/whitepapers/migrate_to_ml.html )  SQL Remote for ASE is EOL’d ( http://www.ianywhere.com/developer/eol/sql_remote_ase_160505.html )  Any further questions regarding the SQL Remote upgrade can be answered in the Technical Support Lounge 116 Agenda for Presentation      Overview of the Upgrade Process Upgrading to SQL Anywhere 10 Upgrading the MobiLink Server Upgrading MobiLink Clients Upgrading UltraLite • Considerations for upgrade • New feature notes • API changes  Upgrading QAnywhere 117 UltraLite Upgrade Process  Most UltraLite database upgrades occur with application upgrades • Synchronize previous application • Deploy new application and database  Schema files are no longer used • • • • • Can deploy database file with application Deploy database file through mlfiletransfer.exe Call CreateDatabase function and execute DDL Plan for non-synchronizing tables Database creation function/method needs to be added – Remove all schema upgrade code and schema file reference code 118 Advantages of UltraLite Upgrade  Increased database limits • Maximum number of rows in a table increased to 16 million  Integrated schema • UltraLite is now a standalone RDBMS and no longer requires a separate schema file to define logical structure of the database • UltraLite database can now be created directly  Increased database performance and data integrity  Indexes may utilize hashing • Hash size can be specified on a per-index basis • Improved performance for index lookups  Checksum validation of the database added  Extended BLOB support • Ability to update, cast data types, and get the length of BLOBs 119 Advantages of UltraLite Upgrade Con’t  Palm support for network_leave_open • Palm devices can choose whether network connectivity stays open after synchronization  Configurable and increased default cache size for HotSync conduit synchronization • Default cache size ( on desktop ) for UltraLite conduit increased to 4 MB • Improves synchronization time by reducing unnecessary file I/O  Improved MobiLink client network layer • Synchronization compression is available for all protocols • Persistent connections • Resumable synchronization 120 Advantages of UltraLite Upgrade Con’t • Introduction of IPv6 support • Improved error detection and debugging  Set table order for synchronization • Ability to specify table ordering to avoid referential integrity issues during table upload 121 Upgrading UltraLite Database  Upgrading database on desktop • ulunloadold – exports XML from version 9 .udb or .usm • ulload – creates a new database and loads in the XML • Sybase Central Upgrade wizard can be used  Creating new databases • No longer a separate Unicode runtime • Sybase Central wizard can be use to set the options  Can now use graphical tools • Sybase Central now supports UltraLite • Interactive SQL now supports UltraLite 122 UltraLite Applications: C/C++ Static APIs  IN • Focus on standards-based interfaces going forward  OUT - Static APIs • ESQL applications can be easily migrated – Simpler build process as SQL Anywhere is no longer required – Review SQL used as UltraLite must now support it – sqlpp -u generates UltraLite code • Static C++ API based applications can migrate to the C++ component – Sybase Central includes Migrate C++ Utility 123 UltraLite Applications: APIs  Keeping pace with mobile application environment  IN • Symbian OS ( C++ and Crossfire ) • C/C++, m-Business Anywhere, or Crossfire are recommended for cross-platform development • Windows Mobile 5.0  OUT • Palm 3.x • Static Java, Native UltraLite for Java, and ActiveX interfaces • .NET iAnywhere.UltraLite namespace in favor for iAnywhere.Data.UltraLite namespace  Synchronization code • Secure synchronization streams are now all separate ( no security 124 parameters ) Name Changes  Name changes for command-line utilities • dbuleng9.exe has been renamed to uleng10.exe • dbulstop.exe has been renamed to ulstop.exe • dbcond9.exe has been renamed to ulcond10.exe  Any further questions regarding the UltraLite upgrade can be answered in the Technical Support Lounge 125 Agenda for Presentation       Overview of the Upgrade Process Upgrading to SQL Anywhere 10 Upgrading the MobiLink Server Upgrading MobiLink Clients Upgrading UltraLite Upgrading QAnywhere • What is QAnywhere? • Considerations for upgrade 126 What is QAnywhere?  Application-to-application messaging system • Store-and-forward nature of messaging – Messages can be constructed even when destination application is not reachable over the network • Network-independent communication  Provides messaging between mobile devices or between mobile devices and the enterprise  Permits seamless communication with other messaging systems that have a JMS interface • Integration with J2EE application 127 Upgrading QAnywhere  The QAnywhere Message Server can communicate with older QAnywhere message agents using the -xo option  The QAnywhere Message Server upgrade process is identical to that of the MobiLink Server  To upgrade the QAnywhere Message Agent • Required to upgrade the message store and this process is identical to that to the MobiLink Client coupled with the -su switch on the qaagent • qaagent -sur is offered to simplified means to the above  Transaction log is no longer used or maintained  New option for setting up failover  Persistent connections are introduced 128 Upgrading QAnywhere Con’t  qaagent -port deprecated • The -port option specified a port number on which QAnywhere Agent listened for communications from the listener  qaagent -la_port replaced • The -la_port option has been replaced by the -lp option  qaagent -push_notifications is renamed • Now called -push  getPropertyNames replaced • The getPropertyNames function has been replaced with the beginEnumPropertyNames, nextPropertyName, and endEnumPropertyNames functions  Any further questions regarding the QAnywhere upgrade can be answered in the Technical Support Lounge 129 Questions  Questions? 130 Application Development with SQL Anywhere for .NET Bill Hillis Senior Manager - Engineering, Sybase iAnywhere [email protected] Monday, August 7, 2006 4:30 pm – 6:00 pm Agenda  Introduction to .NET  SQL Anywhere and ADO.NET  Visual Studio Integration  What’s new in SQL Anywhere 10 133 .NET: Definition  .NET technology enables the creation and use of XML-based applications, processes, and Web sites as services that share and combine information and functionality with each other by design, on any platform or smart device, to provide tailored solutions for organizations and individual people.  .NET is a comprehensive family of products, built on industry and Internet standards, that provide for each aspect of developing (tools), managing (servers), using (building block services and smart clients) and experiencing (rich user experiences) Web services.  http://www.microsoft.com/net/basics/faq.asp 134 .NET Framework  Infrastructure for the overall .NET platform  Common Language Runtime (CLR) • Managed, protected application execution environment • C#, Visual Basic.NET, C++, J#, …  Common Class Libraries • Windows Forms, ADO.NET, ASP.NET,…  .NET Compact Framework • Subset of .NET Framework for smart devices • Part of Visual Studio.NET 2003 • Included on device with CE.NET (CE 4.1), add-on for older devices 135 .NET: Managed Code  Code is written in desired language (C++, C#, VB.NET, Pascal, etc.)  Compiled into Microsoft Intermediate Language (MSIL)  At runtime Common Language Runtime (CLR) compiles the MSIL code and executes it 136 .NET Terms  Namespace • “A logical naming scheme for grouping related types” • Analogous to Java packages • iAnywhere.Data.SQLAnywhere.SAConnection  iAnywhere.Data.SQLAnywhere is the namespace  Assembly • “A collection of one or more files that are versioned and deployed as a unit” • DLLs in .NET-land • Unlike DLLs, .NET assemblies also include version control/security information  GAC (Global Assembly Cache) • “A machine-wide code cache that stores assemblies specifically installed to be shared by many applications on the computer” 137 What is ADO.NET?  Microsoft’s latest data access API • ODBC, DAO, RDO, OLE DB, ADO  Implements System.Data namespace  “Data providers” manage access to data stores  Providers from Microsoft: • System.Data.OleDb • System.Data.Odbc • System.Data.SQLClient • System.Data.OracleClient  “Managed provider”  “Data provider” 138 ADO.NET Interfaces  Each data provider implements the following classes: • • • • Connection – connects to data source Command – executes commands DataReader – forward-only, read-only access to data DataAdapter – fills DataSet and handles updates • Parameter – parameter to a Command object • Transaction – provides commit/rollback functionality • Error, Exception – collect error/warning messages 139 Agenda  Introduction to .NET  SQL Anywhere and ADO.NET  Visual Studio Integration  What’s new in SQL Anywhere 10 140 SQL Anywhere Interfaces  ODBC  ESQL  OLEDB  Open Client  JDBC  Perl  PHP …  ADO.NET 141 SQL Anywhere Data Provider  Implements iAnywhere.Data.SQLAnywhere namespace • • • • • SAConnection SACommand SADataReader SADataAdapter etc.  Supports Windows (.NET framework) and Windows CE (.NET compact framework)  Also support 64-bit Windows 142 SQL Anywhere Data Provider in v8, v9  The namespace was changed for SQL Anywhere 10  Previously iAnywhere.Data.AsaClient namespace • • • • • AsaConnection AsaCommand AsaDataReader AsaDataAdapter etc.  Available since 8.0.2.4122 (March 2003) 143 ADO.NET Data Providers For SQL Anywhere  OLEDB  ODBC  SQL Anywhere iAnywhere.Data.SQLAnywhere System.Data.Oledb System.Data.Odbc SA OLEDB Driver SA ODBC Driver SQL Anywhere 144 Example using DataReader (C#)             SAConnection conn = new SAConnection( “dsn=SQL Anywhere 10 Demo” ); conn.Open(); SACommand cmd = new SACommand( “select GivenName from Employees”, conn ); SADataReader reader = cmd.ExecuteReader(); while( reader.Read() ) { str = reader.GetString( 0 ); Console.WriteLine( str ); } reader.Close(); conn.Close(); 145 Example using DataAdapter (VB.NET)  Dim conn As New iAnywhere.Data.SQLAnywhere.SAConnection()  conn.ConnectionString = “dsn=SQL Anywhere 10 Demo"  conn.Open()  Dim ds As New DataSet()  Dim da As New SADataAdapter  ("select * from Employees", conn)  da.Fill(ds, "Employees")  DGEmployees.DataSource = ds  DGEmployees.DataMember = "Employees" 146 Using the SQL Anywhere Data Provider  Use Visual Studio.NET (VS.NET 2003 or 2005 preferred)  Reference the provider in your project (required) • Project menu, Add Reference • In the .NET tab, find iAnywhere.Data.SQLAnywhere.dll • If the provider is not listed, find it in %SQLANY10%\Assembly  Reference provider in your code (optional) • Allows you to use SQL Anywhere provider classes without namespace prefix • C#: using iAnywhere.Data.SQLAnywhere • VB.NET: Imports iAnywhere.Data.SQLAnywhere 147 SQL Anywhere ADO.NET Data Provider  Classes • SAConnection • SAError • SAException • • • • SACommand SAParameter SADataReader SADataAdapter • • • • SACommandBuilder SAErrorCollection SAInfoMessageEventArgs SAParameterCollection  Classes (continued) – – – – – SAPermission SAPermissionAttribute SARowUpdatedEventArgs SARowUpdatingEventArgs SATransaction  Enumerations – SADbType  Delegates – SAInfoMessageEventHandler – SARowUpdatedEventHandler – SARowUpdatingEventHandler 148 ADO.NET Application Tasks  Connecting  Error handling  Executing SQL  Retrieving data  Transactions  Disconnected result sets 149 Connecting  SAConnection • Represents a connection to a SQL Anywhere database • Uses normal SA connection strings • Optional use of event handlers (InfoMessage, StateChange) 150 Connection Example  using iAnywhere.Data.SQLAnywhere;  private SAConnection myConn;  myConn = new iAnywhere.Data.SQLAnywhere.SAConnection();      myConn.ConnectionString = "Data Source=SQL Anywhere 10 Demo;UID=DBA;PWD=sql”; myConn.Open(); … myConn.Close(); 151 Connection Pooling  ADO.NET spec dictates that connection pooling be enabled by default • Even on Windows CE! • Disable in connection string: POOLING=false  SQL Anywhere server may not auto-stop with pooling enabled • Connection object must be destroyed first  myConn.ConnectionString =  “POOLING=FALSE;Data Source=SQL Anywhere 10 Demo;UID=DBA;PWD=sql"; 152 Error Handling  SAException • Thrown by a failed statement (try/catch) • Message parameter contains error message • Errors property is a collection of SAError objects  SAError • More detailed SQL Anywhere-specific error information • Message, NativeError, Source, SqlState 153 Errors and Exceptions Example  try {  myConn = new SAConnection(  "Data Source=SQL Anywhere 10 Demo” );  myConn.Open();  } catch( SAException ex ) {  MessageBox.Show(  ex.Errors[0].Source + " : " +  ex.Errors[0].Message + " (" +  ex.Errors[0].NativeError.ToString() + ")",  "Failed to connect" ); } 154 Demo: 155 Executing SQL  SACommand • Represents a SQL statement or stored procedure that is executed against a SQL Anywhere database • Parameter property is a collection of SAParameter objects  Multiple methods to execute your SQL • ExecuteNonQuery (returns a row count) • ExecuteReader (returns result set – DataReader) • ExecuteScalar (returns a single value – column 1, row 1)  Stored procedures • Use the name of the procedure as the statement (no “call” or “exec”) • Set the CommandType property to StoredProcedure 156 SACommand Example  SAConnection myConn;  SACommand myCmd;  int num_depts;  myConn = new SAConnection(  “ENG=demo10;UID=DBA;PWD=sql";  myConn.Open();  myCmd = new SACommand(  "select count(*) from Department", myConn );  num_depts = (int) myCmd.ExecuteScalar(); 157 Retrieving Data  SADataReader • Read-only, forward-only result set from a query or stored procedure (rows are fetched as needed) • GetXXX methods to get column value as specific data types • Read method moves to next row  SADataAdapter • Used to fill a DataSet; fetches all rows and closes cursor • More on this later… 158 DataReader Example     SACommand cmd = new SACommand( "select DepartmentId, DepartmentName from Departments",myConn); SADataReader reader; reader = cmd.ExecuteReader();  while( reader.Read() ) {  int id = reader.GetInt32(0);  string name = reader.GetString(1);  MessageBox.Show( “Id: " + id + "\nName: " + name );  }  reader.Close(); 159 DataReader Example – BLOBs  SACommand cmd = new SACommand(  "select bitmap from images where id = 1", myConn);  SADataReader reader = cmd.ExecuteReader();  if( reader.Read() ) {  // get the length of the BLOB by passing a NULL buffer  long len = reader.GetBytes(0, 0, null, 0, 0);  byte bitmap[] = new byte[len];  // get the BLOB  reader.GetBytes(0, 0, bitmap, 0, (int)len);  }  reader.Close(); 160 Demo: 161 Transactions  SATransaction • Represents a SQL transaction • Returned by SAConnection.BeginTransaction() • Commit, Rollback methods • IsolationLevel property 162 Autocommit  Autocommit is on by default in ADO.NET • Disable by explicitly using an SATransaction       myTran = myConn.BeginTransaction(); myCmd = new SACommmand( “call sp_update_some_data()”, myConn, myTran ); myCmd.ExecuteNonQuery(); … myTran.Commit(); 163 Disconnected Result Sets  ADO.NET DataSet (System.Data.DataSet) • Disconnected data access • In-memory cache of data retrieved from database • A collection of DataTables which consist of: – DataRow (data) – DataColumn (schema) – DataRelation (relate DataTables via DataColumns) • Can read/write data/schema as XML documents • Works with data providers to load and modify data using the provider’s DataAdapter 164 SADataAdapter  SADataAdapter • Represents a set of commands and a database connection used to fill a DataSet and to update a database • Fill method fetches all rows and closes cursor • Update method applies changes to DataSet to database (beware of ConcurrencyException!) • SelectCommand, InsertCommand, UpdateCommand, DeleteCommand properties  SACommandBuilder • Attached to an SADataAdapter • Given a SELECT statement, generates corresponding INSERT/UPDATE/DELETE statements 165 DataAdapter Example  SADataAdapter da;  SACommandBuilder cb;  DataSet ds;  da = new SADataAdapter("select * from product", conn );  cb = new SACommandBuilder(da);  ds = new DataSet();  da.Fill(ds, "product");  ...  da.Update(ds, "product“ ); 166 Demo: 167 Application Deployment  SQL Anywhere ADO.NET Provider has two files • iAnywhere.Data.SQLAnywhere.dll (managed code) • dbdata10.dll (native code)  Both files must be deployed • Version of files (i.e. build number) must match • iAnywhere.Data.SQLAnywhere.dll will throw error if versions don’t match iAnywhere.Data.SQLAnywhere.dll Your Application .NET Common Language Runtime dbdata10.dll SQL Anywhere 168 Updating the SQL Anywhere Provider  At compile time, .NET compilers use strong name of referenced assemblies • Strong name includes both name AND version • Microsoft’s attempt to eliminate “DLL hell”  At run time, .NET looks for assemblies based on strong name  An application compiled with iAnywhere.Data.SQLAnywhere version 10.0.0.1234 will only run with version 10.0.0.1234 UNLESS you have a publisher policy file in place 169 Publisher Policy Files  Policy files redirect one version of an assembly to another  Installed into GAC  SQL Anywhere EBFs install policy files, for example: • Application built against 10.0.0.1000 • EBF applied to machine; upgrade to 10.0.1.1883 – EBF installs policy file – Requests for 10.0.0.0 – 10.0.1.1883 redirected to 10.0.1.1883 • %SQLANY10%\Assembly\V2\iAnywhere.Data.SQLAnywhere.dll.config  Security is built-in to policy files • Policy files cannot be compiled without private key assembly was signed with • Only iAnywhere can create policy files for iAnywhere assemblies 170 Example Policy File                 <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoftcom:asm.v1"> <dependentAssembly> <assemblyIdentity name="iAnywhere.Data.SQLAnywhere" publicKeyToken="f222fc4333e0d400" /> <bindingRedirect oldVersion=“10.0.0.0-10.0.1.1883" newVersion=“10.0.1.1883" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 171 Application Deployment: Win32  Files can go anywhere, but typically in <%SQLANY10%>\Assembly\V2  iAnywhere.Data.SQLAnywhere.dll  policy.iAnywhere.Data.SQLAnywhere.dll • Register with gacutil.exe (shipped with .NET)  dbdata10.dll  dblgen10.dll • No registration required 172 Application Deployment: Windows CE  One iAnywhere.Data.SQLAnywhere.dll for all CE platforms • • • • But, separate versions for .NET 1.x and 2.0 Deploy to the Windows or application directory Visual Studio.NET will deploy automatically Make sure to use the CE version of the DLLs!  Separate dbdata10.dll for each CE platform • In %SQLANY10%\ce\xxx • Can go in Windows directory or your application’s directory on the device  Policy files are not supported by .NET Compact Framework • .NET will automatically use newest version of iAnywhere.Data.SQLAnywhere.dll that it finds 173 Agenda     Introduction to .NET SQL Anywhere and ADO.NET Visual Studio Integration What’s new in SQL Anywhere 10 174 Visual Studio Integration  Added in 9.0.2 (November 2004)  Described in white paper • www.ianywhere.com/downloads /whitepapers/integrate_vs.pdf  Adds 3 icons to the toolbar  Enables developers to be more productive  SQL Anywhere Explorer added in November 2005 175 Visual Studio Integration  Demo 176 Agenda     Introduction to .NET SQL Anywhere and ADO.NET Visual Studio Integration What’s new in SQL Anywhere 10 177 What’s New in SQL Anywhere 10  Namespace is renamed  iAnywhere.Data.SQLAnywhere • • • • SAConnection SACommand SADataReader SADataAdapter  More integration with Visual Studio .NET • Server Explorer integration  ADO.NET 2.0 178 Server Explorer Integration  Demo 179 ADO.NET 2.0  Released with Visual Studio 2005 in November  New features • • • • • • Provider factories Data source enumeration Connection string builder Metadata schemas Asynchronous commands Snapshot isolation level 180 SQL Anywhere 10 Data Management and Query Processing Glenn Paulley Senior Manager - Engineering, Sybase iAnywhere [email protected] Tuesday, August 8, 2006 8:00 am – 12:00 pm Performance and Application Profiling in SQL Anywhere 10 Dan Farrar Sr. Engineer, Sybase iAnywhere [email protected] Tuesday August 8, 2006 1:00 pm – 2:30 pm Plan of attack  Overview  Demonstration of automatic application profiling  Details about application profiling • Architecture • User interface  Demonstration of manual application profiling • How to set it up • What to look for  Other methods of troubleshooting performance  Questions? 185 Our problem  Users are complaining about slowness on our application – what should we do? • We will use a “sabotaged” version of SalesSim • Simulates the sales, shipping, and finance departments of a company • How do we use the new profiling features of SQL Anywhere 10 to find the boat anchors and restore/improve performance? 186 Application profiling  Combines in one tool most of the functionality provided by: • • • • • Request logging Procedure profiling Graphical plan capturing Index consultant Statistics monitoring  Many usage scenarios: • Debugging application logic • Troubleshooting specific performance problem • Leave running in background permanently 187 Application profiling wizard  SA Plugin for Sybase Central includes the Application Profiling Wizard • Handle all details of setting up a profile and analyzing it • Detect common problems automatically – – – – Schema Indexes Server and connection options Application structure • Make suggestions for improving your application • Simplest way to use application profiling capabilities 188 Manual application profiling  Using the application profiling tool manually allows for more flexibility in controlling what data is analyzed  High level steps: • • • • • Create and start a tracing database Configure a tracing session Run your application Close (“detach”) the tracing session and save the trace data Analyze the tracing session using the application profiling mode in the SQL Anywhere plugin 189 Diagnostic tracing  The Jasper engine includes new functionality to record many types of database events: • • • • • • Connections SQL statements Query execution plans Blocked connections Deadlocks Performance counters  All types of data can be traced from sources both internal and external to the server 190 Diagnostic architecture  Traced data can go to any database • To local database for ease of use • To a non-local database for performance and to avoid bloat • For best results, use a dedicated database  Traced data stored in temporary tables • New feature in Jasper: shared temporary tables • No I/O overhead • At end of logging session, data automatically saved to permanent storage (base tables) 191 Diagnostic architecture 192 Specifying what to trace  Trace only for a specified list of objects: • Users • Connections • Procedures, triggers, functions, events  Trace only under certain circumstances • When a statement is “expensive” • When a query differs from its estimated cost • Every n milliseconds  Limit volume of trace that is stored • By disk space • By length of time 193 Specifying what to trace  You can mix and match these configurations and change them on the fly  For example: • Trace all plans used by user ‘ALICE’ • Trace all statements used by procedures ‘PR1’ and ‘PR2’ • Trace all query plans in the database for queries that take more than 20 seconds  You can use the default tracing levels (low, medium, high) as a template • The tracing wizard in the SA Plugin will give you this choice • Manually, using the sa_set_tracing_level() procedure 194 Controlling tracing manually  sa_set_tracing_level()  ATTACH TRACING TO ‘connstr’ [LIMIT {HISTORY nnn{MINUTES|HOURS|DAYS}} | {SIZE nnn{MB|GB}}]  DETACH TRACING {WITH|WITHOUT} SAVE  REFRESH TRACING LEVELS 195 The sa_diagnostic_tracing_levels table  Scope – what objects are we interested in? • The whole database? • A specific procedure, user, connection, or table?  Type – what type of data are we interested in? • SQL statements? • Query plans? • Information about blocks, deadlocks, or statistics  Condition – under what conditions should we capture this data? • Only for expensive or misestimated queries? 196 Specifying what to trace 197 Controlling tracing with the SA Plugin  The Tracing wizard is accessible by right-clicking on the database object • First, choose basic tracing level – it acts as a template • Then, add or remove specific tracing entries • Next, if you need to create a tracing database, create it and start it on a database server • Finally, specify where the trace is to be sent, and how much data to store 198 Tracing databases 199 Saving a tracing session  When finished tracing, the tracing session can be stopped (detached): • In the SA plugin, right-click the database object • Manually, use the DETACH TRACING statement  Detaching without saving will leave the data in the temporary tables in the tracing database • It can later be saved using the sa_save_trace_data() procedure  Detaching with save will permanently store the data 200 Analysis of traced data  Can be viewed / queried in real time during trace • Using DBISQL or custom scripts, issue queries against the sa_tmp_diagnostic_* tables  Once saved, a tracing session is analyzed using Application Profiling mode in SA Plugin • Provides multiple views of traced data – Allows “drill-down” to see more detail about a specific entry • Graphical correlation of performance statistics with statements that were active at the time • Automatic detection of common performance problems 201 Replay of server state  Tracing captures optimizer state as queries are executed • Captures cache contents, table sizes, option settings, etc. • Allows server to recreate the optimizer state for queries in the trace – Not foolproof (because of changing statistics) • Can be used to see the graphical plan used by the server when only SQL text was traced • Lets Index Consultant make higher-quality recommendations • Works even if tracing sent to another database – Allows Index Consultant to run offline on another server 202 Status panel  If the trace was created as part of the Application Profiling Wizard: • Shows a summary of what was captured • Performance recommendations are automatically generated and available on the Recommendations panel  If you created a tracing session manually: • Shows all tracing sessions stored in a database • Allows you to generate recommendations 203 Summary panel  Gives a high-level view of SQL statements captured by the tracing session  “Similar” statements are grouped together • For each statement a signature is computed • For queries, insert, update, and delete statements, statements are similar when they involve the same tables and columns • Other statements are grouped by type (for example, all CREATE TABLE statements are similar)  From this view, you can determine which statements are most expensive, either because: • They are expensive individually, or • They are cheap individually but executed many times 204 Details panel  Shows low-level details about all SQL statements captured in the trace • Start time is the time the statement began execution • Duration is the amount of time spent by the server processing the request – all statements have a minimum reported duration of 1ms • For cursors, time the cursor was closed • For compound statements, shows line number and procedure name (if available) • Text plan is always captured at optimization time 205 Statement details  Right click on a statement to obtain more details about it • User that executed it • SQL error code, if any • SQL text – If the statement was captured as it was executed, the text will be the original text – If the statement was captured later (because it met some condition), it will be reconstructed from the parse tree – Reconstructed statements may not be identical to the original statements 206 Query details  Right clicking on a query from the Details view will show both statement and query details  Query details include • • • • Numbers of each type of fetch (forward, reverse, absolute) Time to fetch first row Text plan captured at execution time Graphical plan representation – May be the graphical plan at execution time – May be a best guess at the execution plan, based on the conditions in the server – compare a guessed graphical plan to the text plan before relying on it 207 Blocking panel  Shows connections that were blocked • What statement was the connection executing when it was blocked • What connection blocked it • How long did the block last • Right click to see more details about either connection involved in a block 208 Deadlock panel  Shows deadlock events that were traced • Displays a graphical representation of which connections waited on each other • Shows which connection was rolled back • If available (that is, if tracing was attached to the local database), shows the primary key of each row that was blocked on 209 Statistics panel  Shows a graphical representation of performance counters captured • Multiple statistics can be viewed, but only for one connection at a time • You are often interested in changes in a statistic (a “knee” in a graph) – “Show Statements” button will filter the list of statements in the Details panel to just those that fit on the visible portion of the graph 210 Index consultant  Index consultant can be invoked • on the entire database • on individual queries from the Details panel  It is run automatically when application recommendations are generated • But it generates more details when run manually 211 Other tools for troubleshooting performance  New properties for performance monitoring  Almost all of the old methods of troubleshooting performance are available in SQL Anywhere 10 • There are specific circumstances in which the legacy methods may be the best approach 212 ApproximateCPUTime  Connection-level property – CPU time accumulated by this connection  Reasonably accurate most of the time – but still an approximation  Each CPU contributes to the counter – thus if two connections are maxing out two CPUs for one second, each will have an ApproximateCPUTime value of 1.0  Use to determine what connection may need to be dropped if the server is dragging (but be careful!)  Best viewed from DBConsole 213 Request logging  Stores SQL text of all requests  Enable in two ways: • -zr command line switch (with -zo to redirect output to a file) • sa_server_option( ‘RequestLogging’, ‘all’ )  Additional switches let you store data in a cyclical series of files to limit the maximum captured data  Probably deprecated in future releases 214 Procedure profiling  View the times and execution counts of stored procedures  This feature is now part of application profiling mode in the SA Plugin  Can be used manually from DBISQL • sa_server_option(‘ProcedureProfiling’,‘on’) • Analyse with sa_procedure_profile_summary() and sa_procedure_profile() procedures  Useful for rapid tuning of procedures – it is easy to change the procedure definitions on the fly 215 Improving Performance with SQL Anywhere 10 Materialized Views Anil Goel Sr. Engineer, Sybase iAnywhere [email protected] Tuesday, August 8, 2006 3:00 pm – 4:30 pm
 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                            