1.1.1
Table Of Contents
- Contents
- About the SQLFire User's Guide
- Supported Configurations and System Requirements
- Getting Started with vFabric SQLFire
- Managing Your Data in vFabric SQLFire
- Designing vFabric SQLFire Databases
- Using Server Groups to Manage Data
- Partitioning Tables
- Replicating Tables
- Estimating Memory Requirements
- Using Disk Stores to Persist Data
- Exporting and Importing Data with vFabric SQLFire
- Using Table Functions to Import Data as a SQLFire Tables
- Developing Applications with SQLFire
- Starting SQLFire Servers with the FabricServer Interface
- Developing Java Clients and Peers
- Configuring SQLFire as a JDBC Datasource
- Using SQLFire with Hibernate
- Storing and Loading JAR Files in SQLFire
- Developing ADO.NET Client Applications
- About the ADO.NET Driver
- ADO.NET Driver Classes
- Installing and Using the ADO.NET driver
- Connecting to SQLFire with the ADO.NET Driver
- Managing Connections
- Executing SQL Commands
- Working with Result Sets
- Storing a Table
- Storing Multiple Tables
- Specifying Command Parameters with SQLFParameter
- Updating Row Data
- Adding Rows to a Table
- Managing SQLFire Transactions
- Performing Batch Updates
- Generic Coding with the SQLFire ADO.NET Driver
- Using SQLFire.NET Designer
- Understanding the Data Consistency Model
- Using Distributed Transactions in Your Applications
- Using Data-Aware Stored Procedures
- Using the Procedure Provider API
- Using the Custom Result Processor API
- Programming User-Defined Types
- Using Result Sets and Cursors
- Caching Data with vFabric SQLFire
- Deploying vFabric SQLFire
- SQLFire Deployment Models
- Steps to Plan and Configure a Deployment
- Configuring Discovery Mechanisms
- Starting and Configuring SQLFire Servers
- Configuring Multi-site (WAN) Deployments
- Configuring Authentication and Authorization
- Configuring User Authentication
- User Names in Authentication and Authorization
- Configuring User Authorization
- Configuring Network Encryption and Authentication with SSL/TLS
- Managing and Monitoring vFabric SQLFire
- Configuring and Using SQLFire Log Files
- Querying SQLFire System Tables and Indexes
- Evaluating Query Plans and Query Statistics
- Overriding Optimizer Choices
- Evaluating System and Application Performance
- Using Java Management Extensions (JMX)
- Best Practices for Tuning Performance
- Detecting and Handling Network Segmentation ("Split Brain")
- vFabric SQLFire Reference
- Configuration Properties
- JDBC API
- Mapping java.sql.Types to SQL Types
- java.sql.BatchUpdateException Class
- java.sql.Connection Interface
- java.sql.DatabaseMetaData Interface
- java.sql.Driver Interface
- java.sql.DriverManager.getConnection Method
- java.sql.PreparedStatement Interface
- java.sql.ResultSet Interface
- java.sql.SavePoint Class
- java.sql.SQLException Class
- java.sql.Statement Class
- javax.sql.XADataSource
- sqlf Launcher Commands
- sqlf backup
- sqlf compact-all-disk-stores
- sqlf compact-disk-store
- sqlf encrypt-password
- sqlf install-jar
- sqlf list-missing-disk-stores
- sqlf locator
- sqlf Logging Support
- sqlf merge-logs
- sqlf remove-jar
- sqlf replace-jar
- sqlf revoke-missing-disk-store
- sqlf run
- sqlf server
- sqlf show-disk-store-metadata
- sqlf shut-down-all
- sqlf stats
- sqlf upgrade-disk-store
- sqlf validate-disk-store
- sqlf version
- sqlf write-data-dtd-to-file
- sqlf write-data-to-db
- sqlf write-data-to-xml
- sqlf write-schema-to-db
- sqlf write-schema-to-sql
- sqlf write-schema-to-xml
- sqlf Interactive Commands
- absolute
- after last
- async
- autocommit
- before first
- close
- commit
- connect
- connect client
- connect peer
- describe
- disconnect
- driver
- elapsedtime
- execute
- exit
- first
- get scroll insensitive cursor
- GetCurrentRowNumber
- help
- last
- LocalizedDisplay
- MaximumDisplayWidth
- next
- prepare
- previous
- protocol
- relative
- remove
- rollback
- run
- set connection
- show
- wait for
- SQLFire API
- SQL Language Reference
- Keywords and Identifiers
- SQL Statements
- ALTER TABLE
- CALL
- CREATE Statements
- DECLARE GLOBAL TEMPORARY TABLE
- DELETE
- EXPLAIN
- DROP statements
- GRANT
- INSERT
- REVOKE
- SELECT
- SET ISOLATION
- SET SCHEMA
- TRUNCATE TABLE
- UPDATE
- SQL Queries
- SQL Clauses
- SQL Expressions
- JOIN Operations
- Built-in Functions
- Standard Built-in Functions
- Aggregates (set functions)
- ABS or ABSVAL function
- ACOS function
- ASIN function
- ATAN function
- ATAN2 function
- AVG function
- BIGINT function
- CASE expressions
- CAST function
- CEIL or CEILING function
- CHAR function
- COALESCE function
- Concatenation operator
- COS function
- COSH function
- COT function
- COUNT function
- COUNT(*) function
- CURRENT DATE function
- CURRENT_DATE function
- CURRENT ISOLATION function
- CURRENT_ROLE function
- CURRENT SCHEMA function
- CURRENT TIME function
- CURRENT_TIME function
- CURRENT TIMESTAMP function
- CURRENT_TIMESTAMP function
- CURRENT_USER function
- DATE function
- DAY function
- DEGREES function
- DOUBLE function
- EXP function
- FLOOR function
- HOUR function
- INTEGER function
- LCASE or LOWER function
- LENGTH function
- LN or LOG function
- LOG10 function
- LOCATE function
- LTRIM function
- MAX function
- MIN function
- MINUTE function
- MOD function
- MONTH function
- NULLIF expressions
- PI function
- RADIANS function
- RANDOM function
- RAND function
- RTRIM function
- SECOND function
- SESSION_USER function
- SIGN function
- SIN function
- SINH function
- SMALLINT function
- SQRT function
- SUBSTR function
- SUM function
- TAN function
- TANH function
- TIME function
- TIMESTAMP function
- TRIM function
- UCASE or UPPER function
- USER function
- VARCHAR function
- XMLEXISTS operator
- XMLPARSE operator
- XMLQUERY operator
- XMLSERIALIZE operator
- YEAR function
- SQLFire Built-in Functions
- Standard Built-in Functions
- Built-in System Procedures
- Standard Built-in Procedures
- SYSCS_UTIL.EMPTY_STATEMENT_CACHE
- SYSCS_UTIL.EXPORT_QUERY
- SYSCS_UTIL.EXPORT_TABLE
- SYSCS_UTIL.IMPORT_DATA
- SYSCS_UTIL.IMPORT_DATA_EX
- SYSCS_UTIL.IMPORT_DATA_LOBS_FROM_EXTFILE system procedure
- SYSCS_UTIL.IMPORT_TABLE
- SYSCS_UTIL.IMPORT_TABLE_EX
- SYSCS_UTIL.IMPORT_TABLE_LOBS_FROM_EXTFILE
- SYSCS_UTIL.SET_EXPLAIN_CONNECTION
- SYSCS_UTIL.SET_STATISTICS_TIMING
- JAR Installation Procedures
- Callback Configuration Procedures
- Heap Eviction Configuration Procedures
- WAN, Statistics, and User Configuration Procedures
- Standard Built-in Procedures
- Data Types
- SQL Standards Conformance
- System Tables
- ASYNCEVENTLISTENERS
- GATEWAYRECEIVERS
- GATEWAYSENDERS
- INDEXES
- JARS
- MEMBERS
- MEMORYANALYTICS
- STATEMENTPLANS
- SYSALIASES
- SYSCHECKS
- SYSCOLPERMS
- SYSCOLUMNS
- SYSCONGLOMERATES
- SYSCONSTRAINTS
- SYSDEPENDS
- SYSDISKSTORES
- SYSFILES
- SYSFOREIGNKEYS
- SYSKEYS
- SYSROLES
- SYSROUTINEPERMS
- SYSSCHEMAS
- SYSSTATEMENTS
- SYSSTATISTICS
- SYSTABLEPERMS
- SYSTABLES
- SYSTRIGGERS
- SYSVIEWS
- Exception Messages and SQL States
- ADO.NET Driver Reference
- SQLFire Data Types in ADO.NET
- VMware.Data.SQLFire.BatchUpdateException
- VMWare.Data.SQLFire.SQLFClientConnection
- VMware.Data.SQLFire.SQLFCommand
- VMware.Data.SQLFire.SQLFCommandBuilder
- VMware.Data.SQLFire.SQLFType
- VMware.Data.SQLFire.SQLFDataAdapter
- VMware.Data.SQLFire.SQLFDataReader
- VMware.Data.SQLFire.SQLFException
- VMware.Data.SQLFire.SQLFParameter
- VMware.Data.SQLFire.SQLFParameterCollection
- VMware.Data.SQLFire.SQLFTransaction
- vFabric SQLFire Limitations
- Troubleshooting Common Problems
- vFabric SQLFire Glossary
- Index
failure or the last copy the associated rows goes down during the PREPARED state, the transaction is rolled
back on all cohorts.
4. If a participating member fails before acknowledging to the client, then the transaction continues on other
members without any interruption. However, if that member contains the last copy of a table or bucket, then
the transaction is rolled back.
Note: In this release of SQLFire, a transaction fails if any of the cohorts depart abnormally.
Sequence of Events for a Distributed Transaction
Here is a step-by-step description of events that occur before and during the transaction commit sequence.
Before a transaction is committed, the following events occur:
1. When a transaction is started the transaction coordinator creates a globally unique ID (TXID) and creates a
work space (TXState) to track operations. If the transaction is started from a thin client connection, the
coordination happens on the server to which the client is connected. Note that transactions are started implicitly
in JDBC: the end of one transaction implicitly starts a new one.
2. All updates in the scope of a transaction are immediately propagated to all replicas in parallel and are partially
coordinated on each data store (cohort). Each member that owns the data involved in the transaction manages
the state in a local TXState. When updates are received by a cohort, it attempts to obtain local write locks
on the rows. A cohort fails immediately if the rows are already locked by another transaction. Failure to
obtain locks results in the coordinator implicitly rolling back the entire transaction and releasing all the locks
on the data hosts.
3. SQLFire only detects Write-Write conflicts. To prevent rows fetched in the transaction from being modified
before transaction commit, SQLFire supports select for update where the selected rows are locked
before the result set can be returned.
4. While the transaction is in progress the updates are maintained only in the TXState on the data stores,
completely isolated from other concurrent connections.
5. Any constraint checks on the rows are immediately applied, and failures result in a constraint violation
exception.
Note: In this release of SQLFire, constraint violations also implicitly roll back the transaction.
6. Readers do not normally acquire any locks unless the rows being read are about to be committed. Transactional
read operations are applied to the TXState first, before they are applied to the committed state.
7. When using the REPEATABLE_READ isolation level, all rows from selects are written first to the TXSTate
before they are returned to the application.
These events occur during the transaction commit sequence:
1. When a commit message is received by the coordinator, it dispatches a single commit message to all of the
cohorts. Because the rows are already locked and constraints applied during the transaction, it is certain that
the transaction will not fail due to conflicts.
2. Each cohort guarantees transaction atomicity by making sure that no concurrent transaction can see
partially-committed state on the data store. Note that even though SQLFire guarantees that no concurrent
access sees the partially-committed state of a transaction on any single cohort, the commit phase does not
guarantee that to be the case across all of the cohorts that are involved in the transaction.
3. Each cohort applies the TXState changes to the tables in memory, and releases all the locks before
acknowledging to the coordinator.
vFabric SQLFire User's Guide154
Developing Applications with SQLFire