Microsoft SQL Server 2000 A Guide to Enhancements and New Features

by
Edition: 1st
Format: Paperback
Pub. Date: 2002-03-19
Publisher(s): Addison-Wesley Professional
Availability: This title is currently not available.
List Price: $44.99

Rent Book

Select for Price
There was a problem. Please try again later.

New Book

We're Sorry
Sold Out

Used Book

We're Sorry
Sold Out

eBook

We're Sorry
Not Available

Summary

This book is written for SQL Server developers, DBAs, database managers, systems engineers, and business analysts. It does briefly cover the basics of SQL Server in Part IV, where SQL Server 2000 is compared with Oracle 9i, but throughout the book it is assumed that you have some familiarity with database concepts and SQL Server (any version).

When I began writing this book, I had these goals in mind:

  • Cover the new feature sets of SQL Server 2000 and its enhancements over SQL Server 7.0.
  • Give a checklist of common errors made with SQL Server and point out how to rectify them to make sure that installs and servers are functioning correctly.
  • Provide sample code wherever possible to illustrate the feature sets and emphasize the points.
  • Avoid excessive screenshots and other fillers often used in computer books.
  • Provide tips (on SQL Server code, settings, and hardware) for improving the performance of SQL Server applications.
  • Provide SQL Server developers and DBAs with scripts and utilities that ease their day-to-day administration jobs.
  • Provide a consolidated list comparing features of Oracle 9i and SQL Server 2000 and provide examples of what users should look out for when they start converting their Oracle database to SQL Server.
  • Provide information about SQL Server.NET and how SQL Server 2000 fits into the .NET environment.

You, the readers, will have to judge for yourselves whether I have met these goals have been met or not. Regardless of the degree of success, my hope is that at least the effort that went into writing this book will be evident.

At times where I had to illustrate the command parameters (as for the Index Tuning Wizard--itwiz.exe) and describe what the command line parameters are, it may seem like a rehash of SQL Server Books Online (BOL). This is because the commands are exactly the same, and there can be no better description than BOL for what those command line parameters stand for. They are included only if necessary to illustrate a particular command functionality. All credit for these descriptions of command parameters goes to the BOL team at Microsoft.

Short Outline of the Book

The book is divided into five parts that contain 28 chapters.

Chapter 1: Overview of SQL Server 2000 and what it has to offer in the world of OLTP (online transaction processing) and OLAP (online analytical processing). The SQL Server install, different editions and their feature set differences, upgrading from the previous version to SQL Server 2000 and between different editions, multiple instances, and how to debug SQL Server install are also covered in this part. It also contains a checklist for checking the database server's stability from time to time.

Part I: New Features and Improvements over SQL Server 7.0: Listing and brief description of the enhancements and the new features of SQL Server 2000. Chapters 2-19 cover SQL Server 7.0 (in brief) and what is replaced/added in SQL Server 2000 (in detail, along with examples). Emphasis is on XML and why/how SQL Server 2000 is a Web-enabled database server, how data can be retrieved/added/modified through XML, SQL 2000's tight integration with the Internet, and other new features such as indexed views, DPVs (distributed partitioned views), UDFs (user-defined functions), debugger, and so on.

Part II: Advanced DBA Topics: Chapters 20-24 cover some advanced DBA topics such as using the object models of SQL-DMO to write effective programs, DBCC (database consistency checks) commands and performance optimization and debugging techniques. Orphaned sessions and MSDE are discussed. The installation and bug fixes in SQL Server 2000 Service Pack 1 are also discussed.

Part III: Comparison with Oracle 9i: Since Oracle is the biggest competitor of SQL Server 2000 and since many companies that use Oracle are either shifting to SQL Server 2000 (because it's economically viable) or are planning to support SQL Server 2000 as well in order to broaden their customer base, it is necessary to know the differences between the two and how one can convert applications from Oracle to SQL Server and what it takes from the database perspective to do so.

SQL Server basics are also discussed, as this part is oriented toward people who know Oracle and are interested in migrating their applications to SQL Server 2000. The basics will also be beneficial for novice users of SQL Server 2000.

Part IV: Scripts and Utilities: Chapter 27 contains scripts and utilities to make the day-to-day task of database administration easy. All the scripts are explained and are included on the CD-ROM as well.

Part V: SQL Server.NET: .NET is the latest buzzword in the Microsoft arena. In Chapter 28 we take a look at how SQL Server 2000 fits into the .NET scenario and what can be expected in the next release of SQL Server, code named "Yukon."



0201752832P03112002

Author Biography

Rahul Sharma is a senior database administrator for Manhattan Associates, Inc., and a columnist for both Swynk.com and SQLServerCentral.com

Table of Contents

Preface xxiii
Acknowledgments xxvii
SQL Server 2000 Overview
1(32)
SQL Server Editions
1(2)
Hardware Requirements for Installation
3(6)
Installation of SQL Server 2000
9(14)
Debugging Installation Issues with SQL Server 2000
14(1)
Upgrading from a Previous Version of SQL Server
15(2)
Edition Upgrades
17(1)
Adding Components to an Instance of SQL Server 2000
18(1)
Uninstalling SQL Server 2000
19(1)
Unattended Installs
20(2)
Installing SQL Server Using SMS
22(1)
Rebuilding the Registry
23(1)
Multiple Instances
23(3)
Default Instances
24(1)
Named Instances
24(1)
File Locations for Multiple Instances of SQL Server
25(1)
Network Protocols
26(1)
Collations Support for Internationalization
26(1)
Checklist for a Successful Install of SQL Server
27(3)
Maintenance and Integrity Checks
30(1)
Summary
31(2)
PART I New Features and Improvements over SQL Server 7.0 33(240)
Enhancements and Changes to Existing Features
35(14)
Feature Sets
35(11)
Fully Web-Enabled
35(1)
English Query
36(1)
More Scalable and Reliable
36(1)
BizTalk Server 2000
37(1)
Multi-Instance Support
37(1)
Reduction in Development Time
38(1)
Accessing Data via Internet
39(1)
Web-Based Analysis
40(1)
VI SAN Support
40(1)
Indexed Database Views
40(1)
T-SQL Debugger
41(1)
User-Defined Functions
41(1)
New Data Types
41(1)
Cascading DRI
41(1)
Distributed Partitioned Views
42(1)
OLAP Services
42(1)
DTS
42(1)
INSTEAD OF and AFTER Triggers
43(1)
Collation Enhancements
43(1)
Full-Text Search Enhancements
43(1)
Multiple Instances of SQL Server
44(1)
Index Enhancements
44(1)
Failover Clustering Enhancements
44(1)
Net-Library Enhancements
44(1)
64-GB Memory Support
45(1)
Distributed Query Enhancements
45(1)
Kerberos and Security Delegation
45(1)
Backup and Restore Enhancements
46(1)
Scalability Enhancements for Utility Operations
46(1)
Text in Row Data
46(1)
Summary
46(3)
XML Support in SQL Server 2000
49(28)
Generating XML with the SELECT Statement
50(1)
Generating XML over the Internet
51(1)
Retrieving XML-Formatted Data from SQL Server
51(2)
Reserved Characters
53(4)
XML Templates
57(1)
Using EXPLICIT Mode
58(4)
XSL Stylesheets
62(2)
XML System Stored Procedures
64(1)
OPENXML
64(6)
Writing Queries Against an XML Document
70(6)
OPENXML Parameters
70(1)
XPath Expression to Identify the Nodes to Be Processed' (rowpattern)
70(1)
Description of the Rowset to Be Generated
71(1)
Mapping Between the Rowset Columns and the XML Nodes
72(1)
Specifying Metaproperties in OPENXML
73(1)
Examples
73(3)
Summary
76(1)
Engine Enhancements in SQL Server 2000
77(22)
The Enhancements
78(3)
Interacting with Data
81(4)
Reading Data More Effectively
82(1)
Top n Enhanced
82(1)
Shared Scans
83(1)
Concurrency
83(2)
Tables and Indexes
85(2)
In-Row Text
85(1)
New Data Types
86(1)
Indexes
86(1)
Logging and Recovery
87(4)
Logical Log Marks
88(1)
Shrinking the Transaction Log
89(1)
Recovery Models
90(1)
Improved Backup Functionality
91(2)
Administrative Improvements
93(2)
Database Verification
93(1)
Database State Control
94(1)
System Process IDs and Units of Work
94(1)
Dynamic Tuning
95(1)
Data Storage Components
95(2)
Memory Pool
96(1)
Files, Filegroups, and Disks
96(1)
Summary
97(2)
DTS Enhancements
99(14)
New Features in DTS
100(2)
New Custom Tasks
101(1)
Enhanced Logging Facilities
101(1)
Saving DTS Packages to Visual Basic Files
101(1)
Using the Multiphase Data Pump
101(1)
Using Parameterized Queries
101(1)
Using Global Variables to Pass Information Between DTS Packages
102(1)
Using DTS Designer
102(5)
Tasks: Defining Steps in a Package
102(3)
Workflows: Setting Task Precedence
105(1)
Connections: Accessing and Moving Data
106(1)
Data Pump: Transforming Data
107(2)
Data Pump Error Logging
108(1)
Data Pump Phases
109(1)
Options for Saving DTS Packages
109(1)
DTS as an Application Development Platform
110(1)
Summary
110(3)
Profiler and Index Tuning Wizard Enhancements
113(32)
SQL Profiler Terminology
113(2)
Starting Profiler Trace
115(13)
General
116(2)
Events
118(4)
Data Columns
122(3)
Filters
125(3)
Templates
128(1)
Defining Your Own Trace Using Stored Procedures
128(1)
Defining a Server Side Trace
129(6)
Known Bug in SQL Server 2000 Profiler
135(1)
Symptoms
135(1)
Cause
136(1)
Resolution
136(1)
Index Tuning Wizard
136(2)
Analyzing Index Tuning Wizard Output
138(2)
Starting the Index Tuning Wizard
140(1)
Itwiz.exe
140(4)
Summary
144(1)
Replication Enhancements
145(10)
Types of Replication
146(1)
Replication Options
146(2)
New Features and Improvements
148(3)
Implementing Replication
148(1)
Merge Replication
149(1)
Transactional Replication
150(1)
Queued Updating
151(1)
Transforming Published Data
151(1)
Replication Usability
151(1)
Log Shipping
152(2)
Configuring Log Shipping with the Database Maintenance Plan Wizard
152(1)
Configuring Log Shipping Manually
153(1)
Summary
154(1)
New Data Types
155(6)
bigint
155(1)
sql_variant
155(2)
Table
157(3)
Summary
160(1)
User-Defined Functions
161(8)
Types of User Defined Functions
162(4)
Scalar Functions
162(1)
Table-Valued Functions
162(4)
Obtaining Information About Functions
166(1)
Summary
166(3)
Indexed Views
169(12)
Performance Gains from Indexed Views
170(1)
Benefits of Using Indexed Views
171(1)
Query Optimizer
171(2)
Design Considerations
173(2)
Creating an Indexed View
175(3)
Using SET Options to Obtain Consistent Results
175(1)
Using Deterministic Functions
176(1)
Additional Requirements
177(1)
Maintaining Indexed Views
178(1)
Summary
179(2)
Trigger Alternatives
181(10)
Types of Triggers
181(5)
AFTER Triggers
181(1)
INSTEAD OF Triggers
181(4)
Core Difference Between INSTEAD OF and AFTER Triggers
185(1)
Which Trigger to Pick?
186(1)
Designing INSTEAD OF Triggers
186(3)
Summary
189(2)
Meta Data Services Enhancements
191(8)
Meta Data Fundamentals
191(3)
Meta Data Is Abstract
192(1)
Meta Data Has Context
193(1)
Meta Data Has Multiple Purposes
193(1)
Meta Data Management
193(1)
Information Model Fundamentals
194(2)
Information Model Building Blocks
195(1)
Standard Information Models
195(1)
Importance of Information Models
195(1)
New Features in Meta Data Services
196(1)
Meta Data Browser Enhancement
196(1)
XML Encoding Enhancements
196(1)
XML in Meta Data Services
196(1)
Summary
197(2)
Tool Enhancements
199(6)
Query Analyzer
199(1)
Templates
199(2)
Using Templates in SQL Query Analyzer
200(1)
Building Your Own Template
201(1)
Copy Database Wizard
201(2)
Uses of Copy Database Wizard
202(1)
Copy and Move Process
203(1)
Summary
203(2)
Backup and Recovery Enhancements
205(8)
Backup and Restore Architecture
205(2)
Capabilities
206(1)
Recovery Models
207(4)
Simple Recovery
208(1)
Full Recovery
208(1)
Bulk-Logged Recovery
209(2)
Switching Recovery Models
211(1)
Summary
211(2)
Analysis Services Enhancements
213(8)
Cube Enhancements
213(2)
Dimension Enhancements
215(2)
Data Mining Enhancements
217(1)
Other Enhancements
218(1)
Summary
219(2)
Distributed Partitioned Views
221(14)
What Are Distributed Partitioned Views?
221(5)
How Distributed Partitioned Views Work
223(1)
Building Distributed Partitioned Tables and Views
223(2)
How the Query Processor Uses Distributed Partitioned Views
225(1)
Designing Systems That Maximize Distributed Partitioned View Performance
226(3)
Designing Partitions
226(2)
Designing the Application Tier for Load Balancing
228(1)
Designing for High Availability
228(1)
Backing Up and Restoring Federated Database Servers
229(1)
Updatable Partitioned Views
229(4)
Table Rules
230(1)
Column Rules
230(1)
Partitioning Column Rules
231(1)
Data Modification Rules
231(1)
INSERT Statements
231(1)
UPDATE Statements
232(1)
DELETE Statements
232(1)
Distributed Partition View Rules
233(1)
Summary
233(2)
T-SQL Debugger
235(4)
Summary
237(2)
Cascading Declarative Referential Integrity
239(6)
Cascading Referential Integrity Constraints
239(1)
Multiple Cascading Actions
240(1)
Triggers and Cascading Referential Actions
241(1)
Cascading Referential Constraints Catalog Information
242(1)
Summary
243(2)
Collation Enhancements
245(28)
How Character Data Is Stored
245(2)
International Data and Unicode
247(1)
Sort Order
248(1)
What Is Unicode and How Can It Be Used?
248(3)
UCS-2
249(1)
UTF-16
250(1)
UTF-8
250(1)
Data Types in SQL Server 2000
251(4)
Non-Unicode Text Types: char varchar, text
251(1)
Unicode Text Types: nchar, nvarchar, ntext
252(1)
Date/Time Types: datetime, smalldatetime
253(2)
Collation in SQL Server 2000
255(3)
Collations Specified at Multiple Levels
258(5)
Collations at the Server Level
258(1)
Collations at the Database Level
258(1)
Collations at the Column Level
259(2)
Collations in Expressions
261(1)
Considerations Before Changing the Collation of a Database
262(1)
Collation Precedence
263(2)
COLLATE Keyword
265(1)
Limitations of the COLLATE Keyword
266(1)
Issues with Defining Collation at the Column Level
266(1)
LCIDs and Collations
266(1)
ISO Strings and Collations
267(1)
Multilingual Data in the User Interface
267(1)
Multilingual Information in the Grid and SQL Panes of SQL Query Analyzer
268(1)
Format Issues in the Query Designer
269(1)
Sort Order
269(1)
Double-Byte (DBCS) Characters
270(1)
Getting to SQL Server Data (Data Access Methods)
270(1)
Multilingual Transact-SQL
271(1)
Summary
272(1)
Part II Advanced DBA Topics 273(96)
SQL Distributed Management Objects
275(8)
What Is SQL-DMO?
276(1)
SQL-DMO Object Model
276(2)
ExecuteImmediate Method
278(1)
Script Method
279(1)
SQL-DMO Code for Executing a Job
280(1)
SQL-DMO Code to Play with Triggers
281(1)
Summary
282(1)
Microsoft Desktop Engine
283(10)
Portable and Compatible
284(1)
Minimum Requirements
284(1)
Features and Limitations
285(1)
MSDE Install
286(3)
Scenarios for Using MSDE
289(1)
Developing Applications with MSDE
290(1)
Sample Application
290(1)
MSDE Service Pack1
290(1)
Summary
291(2)
Administration
293(20)
Database Consistency Checks (DBCCs)
293(2)
Undocumented DBCC Commands
295(6)
Information Schema Views
301(2)
Orphaned Sessions
303(3)
Issues with Orphaned Sessions
303(1)
Resolving Issues through the Query Analyzer
304(1)
Changing the Check Frequency
305(1)
Linked Servers
306(5)
Creating Linked Servers
307(1)
Setting the Linked Server Options
308(1)
Creating Logins for the Linked Server
309(1)
Querying the Linked Server
309(2)
Summary
311(2)
Debugging Database Performance Issues
313(38)
Performance Monitor or Task Manager?
313(1)
Performance Monitor
314(4)
Using the Performance Monitor
315(2)
Which Process Is the Bottleneck?
317(1)
Task Manager
318(1)
Performance Monitor Counters
319(7)
CPU Performance Counters
320(2)
I/O Performance Counters
322(1)
Memory Performance Counters
322(1)
Network Performance Counters
323(1)
SQL Server Performance Counters
324(2)
Settings
326(2)
Event Viewer
328(2)
SQL Server Profiler
330(1)
Hardware Issues
331(4)
Database Setup
335(1)
SQL Tips
336(13)
Create and Use Proper Indexes
336(1)
Use Clustered Indexes
337(2)
Short Index Keys
339(1)
Use Covering Indexes
340(1)
Help SQL Server Choose Indexes
341(1)
Estimate Index Selectivity
341(2)
Use the SQL Server Query Optimizer
343(1)
Use Indexes Effectively
344(1)
Use Foreign Keys for Joins
344(1)
Use Concatenated Keys Correctly
344(1)
Use Only Selective Indexes
344(1)
Avoid NULL Checks
345(1)
Avoid Functions and Expressions on the Indexed Columns
345(1)
Avoid the Inequality Operator
346(1)
Avoid Full Table Scans
346(1)
Use EXISTS to Check for the Existence of a Record
347(1)
Replace NOT IN with NOTEXISTS
347(1)
Large Insert, Update, and Delete SQLs
347(1)
Do Not Use Positional Numbers
348(1)
Use Group Functions Carefully
348(1)
Summary
349(2)
SQL Server 2000 Service Pack 1
351(18)
Before the Install
352(1)
Installing Service Pack 1
353(1)
Install Database Components SP1
354(2)
Install Analysis Services SP1
355(1)
Install Desktop Engine SP1
356(1)
Removing Service Pack 1/Rolling Back to the Previous State
356(1)
Fixing Bugs
356(12)
Fixes for MDAC
357(5)
SQL Server 2000 Fixes
362(6)
Summary
368(1)
PART III Comparison with Oracle 9i 369(88)
Oracle 9i vs. SQL Server 2000
371(16)
Database Definition
371(2)
Database System Catalogs
373(1)
Physical and Logical Storage Structures
374(1)
Striping Data
374(1)
Transaction Logs and Automatic Recovery
375(1)
Networks
376(1)
Comparison of Features Provided by the Two RDBMS
377(7)
New Features in Oracle 9i
384(1)
Summary
385(2)
Migrating from Oracle 9i Databases to SQL Server 2000
387(70)
Database Security and Roles
387(4)
Database File Encryption
387(1)
Network Security
387(1)
Login Accounts
388(1)
Groups, Roles, and Permissions
388(1)
Database Users and the Guest Account
389(1)
Sysadmin Role
390(1)
db-owner Role
391(1)
Defining Database Objects
391(7)
Database Object Identifiers
393(1)
Qualifying Table Names
393(2)
Creating Tables
395(1)
Table and Index Storage Parameters
396(1)
Views
397(1)
Indexed Views/Materialized Views
398(5)
Indexes
398(1)
Clustered Indexes
399(1)
Nonclustered Indexes
400(1)
Index Syntax and Naming
400(1)
Index Data Storage Parameters
401(1)
Ignoring Duplicate Keys
401(1)
Indexes on Computed Columns
402(1)
Using Temporary Tables
402(1)
Data Types
403(2)
Using Unicode Data
403(1)
Object-Level Permissions
404(1)
Enforcing Data Integrity and Business Rules
405(9)
Naming Constraints
406(1)
Primary Keys and Unique Columns
406(1)
Adding and Removing Constraints
407(1)
Generating Unique Values
407(2)
Domain Integrety
409(1)
Referential Integrity
410(1)
User-Defined Integrity
411(1)
Delaying the Execution of a Stored Procedure
412(1)
Specifying Parameters in a Stored Procedure
412(1)
Triggers
412(2)
Transactions, Locking, and Concurrency
414(8)
Transactions
415(1)
Locking and Transaction Isolation
416(1)
Dynamic Locking
417(1)
Changing Default Locking Behavior
418(2)
Handling Deadlocks
420(1)
Insert Statements: The Forgotten Culprit
420(2)
Remote Transactions
422(1)
Distributed Transactions
422(1)
Two-Phase Commit Processing
423(1)
SQL Language Support
423(5)
SELECT and Data Manipulation Statements
423(1)
SELECT Statements
424(1)
INSERT Statements
425(1)
UPDATE Statements
426(1)
DELETE Statements
427(1)
TRUNCATE TABLE Statement
428(1)
Manipulating Data in Identity and Timestamp Columns
428(1)
Locking Requested Rows
429(1)
Row Aggregates and the Compute Clause
429(2)
Join Clauses
430(1)
Reading and Modifying BLOBs
431(1)
Functions
432(2)
Conditional Tests
434(2)
Converting Values to Different Data Types
436(1)
User Defined Functions
436(2)
Comparison Operators
438(1)
Pattern Matches
439(1)
Using NULL in Comparisons
439(1)
String Concatenation
439(1)
Control-of Flow Language
440(13)
Declaring Variables
441(1)
Assigning Variables
441(1)
Statement Blocks
441(1)
Conditional Processing
442(1)
Repeated Statement Execution (Looping)
442(1)
GOTO Statement
443(1)
PRINT Statement
443(1)
Returning from Stored Procedures
444(1)
Raising Program Errors
444(1)
Implementing Cursors
445(1)
Declaring a Cursor
445(2)
Opening a Cursor
447(1)
Fetching Data
447(1)
CURRENT OF Clause
448(1)
Closing a Cursor
448(5)
Developing and Administering Database Replication
453(1)
Moving Data and Applications
454(1)
Summary a
455(2)
PART IV Scripts and Utilities 457(60)
Administration and Utility Scripts
459(58)
Scripts
459(47)
Disable Constraints
459(2)
Enable Constraints
461(2)
USP_Find_Lock
463(2)
USP_Lock_Info
465(1)
Greatest
466(1)
Update Statistics
466(1)
USP_Active
467(1)
Objects
468(1)
Number_Of Rows
469(1)
USP_Update_One_Table
470(2)
USP_System_Info
472(1)
USP_Null_Columns
473(1)
USP_SetUP_Paths
474(1)
USP_Identity_Columns
474(1)
USP_DB_File_Info
475(1)
USP_ NOIndexes
475(1)
USP_ RenameDB
476(1)
USP_ ForceDropDB
476(1)
USP_Trace_BlackBox
477(2)
Registry_Info
479(2)
USP_KillConnections
481(3)
USP_FK_PK
484(1)
USP_DefragDatabase
485(1)
USP_DBUpdate
486(2)
USP_Calc_Space
488(13)
BackUp.vbs
501(1)
USP_PingServers
502(1)
Schema Comparison Scripts
503(1)
USP_MonitorServices
504(1)
USP_DTSReplaceOwner
505(1)
DTS Packages
506(7)
Refresh Databases
507(1)
Back Up Databases and Version Control
507(1)
ScriptData
508(1)
ExportPackages.vbs
508(3)
ImportPackages.vbs
511(2)
Executing DTS Through T-SQL
513(1)
Copying Databases from Server to Server
513(3)
Method 1
513(2)
Method 2
515(1)
Method 3
516(1)
Method 4
516(1)
Method 5
516(1)
Summary
516(1)
PART V SQL Server.NET 517(10)
SQL Server 2000 and .NET
519(8)
What Is Microsoft.NET?
519(1)
From Products Vendor to Services Vendor
519(3)
Web Services
522(1)
.NET Servers
522(1)
SQL Server 2000 and .NET
523(1)
Next Release of Microsoft Server
524(1)
Windows XP and .NET
525(1)
Summary
525(2)
Appendix 527(4)
SQL Server Resources
527(1)
CD-ROM Materials
527(1)
MSDE Install Sample VB Application
527(4)
Index 531

An electronic version of this book is available through VitalSource.

This book is viewable on PC, Mac, iPhone, iPad, iPod Touch, and most smartphones.

By purchasing, you will be able to view this book online, as well as download it, for the chosen number of days.

Digital License

You are licensing a digital product for a set duration. Durations are set forth in the product description, with "Lifetime" typically meaning five (5) years of online access and permanent download to a supported device. All licenses are non-transferable.

More details can be found here.

A downloadable version of this book is available through the eCampus Reader or compatible Adobe readers.

Applications are available on iOS, Android, PC, Mac, and Windows Mobile platforms.

Please view the compatibility matrix prior to purchase.