随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为SAP IQ 16.0 SP03中文版:
Entity Framework 支持
SAP Sybase IQ .NET 数据提供程序支持 Entity Framework 4.3,可从 Microsoft 获得独 立的安装包。要使用 Entity Framework 4.3,必须使用 Microsoft 的 NuGet Package Manager 将其添加到 Visual Studio 中。
Entity Framework 的一个新功能是 Code First。它可实现不同的开发工作流:只需写入 映射到数据库对象的 C# 或 VB.NET 类即可定义数据模型对象,而不必打开设计器或
定义 XML 映射文件。此外,也可以使用数据标注或 Fluent API 执行其它配置。可使 用模型生成数据库模式或映射到现有数据库。
以下是使用模型创建新的数据库对象的示例:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.Data.Entity;
using System.Data.Entity.Infrastructure; using System.Linq;
using iAnywhere.Data.SQLAnywhere;
namespace CodeFirstExample
{
[Table( "EdmCategories", Schema = "DBA" )] public class Category
{
public string CategoryID { get; set; } [MaxLength( 64 )]
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
[Table( "EdmProducts", Schema = "DBA" )] public class Product
{
public int ProductId { get; set; } [MaxLength( 64 )]
public string Name { get; set; }
public string CategoryID { get; set; }
public virtual Category Category { get; set; }
}
[Table( "EdmSuppliers", Schema = "DBA" )] public class Supplier
{
[Key]
public string SupplierCode { get; set; } [MaxLength( 64 )]
public string Name { get; set; }
}
public class Context : DbContext
{
public Context() : base() { }
public Context( string connStr ) : base( connStr ) { }
public DbSet<Category> Categories { get; set; } public DbSet<Product> Products { get; set; } public DbSet<Supplier> Suppliers { get; set; }
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
modelBuilder.Entity<Supplier>().Property( s =>
s.Name ).IsRequired();
}
}
class Program
{
static void Main( string[] args )
{
Database.DefaultConnectionFactory = new SAConnectionFactory();
Database.SetInitializer<Context>( new DropCreateDatabaseAlways<Context>() );
using ( var db = new Context( "DSN=Sybase IQ Demo" ) )
{
var query = db.Products.ToList();
}
}
}
}
要生成并运行此示例,必须添加以下程序集引用:
EntityFramework iAnywhere.Data.SQLAnywhere.v4.0 System.ComponentModel.DataAnnotations System.Data.Entity
以下是有关映射到现有数据库的另一个示例:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.Data.Entity;
using System.Data.Entity.Infrastructure; using System.Linq;
using iAnywhere.Data.SQLAnywhere;
namespace CodeFirstExample
{
[Table( "Customers", Schema = "GROUPO" )] public class Customer
{
[Key()]
public int ID { get; set; }
public string SurName { get; set; } public string GivenName { get; set; } public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Country { get; set; }
public string PostalCode { get; set; } public string Phone { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
[Table( "Contacts", Schema = "GROUPO" )] public class Contact
{
[Key()]
public int ID { get; set; }
public string SurName { get; set; } public string GivenName { get; set; } public string Title { get; set; } public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Country { get; set; }
public string PostalCode { get; set; } public string Phone { get; set; } public string Fax { get; set; }
[ForeignKey( "Customer" )]
public int CustomerID { get; set; }
public virtual Customer Customer { get; set; }
}
public class Context : DbContext
{
public Context() : base() { }
public Context( string connStr ) : base( connStr ) { }
public DbSet<Contact> Contacts { get; set; } public DbSet<Customer> Customers { get; set; }
}
class Program
{
static void Main( string[] args )
{
Database.DefaultConnectionFactory = new SAConnectionFactory();
Database.SetInitializer<Context>( null );
Demo" ) )
using ( var db = new Context( "DSN=SAP Sybase IQ 16
{
foreach ( var customer in db.Customers.ToList() )
{
{9}",
Console.WriteLine( "Customer - " + string.Format( "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8},
customer.ID, customer.SurName,
customer.GivenName,
customer.Street, customer.City, customer.State, customer.Country, customer.PostalCode, customer.Phone, customer.CompanyName ) );
foreach ( var contact in customer.Contacts )
{
string.Format(
{9}, {10}",
contact.GivenName, contact.State,
}
}
Console.WriteLine( " Contact - " +
"{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8},
contact.ID, contact.SurName, contact.Title,
contact.Street, contact.City,
contact.Country, contact.PostalCode, contact.Phone, contact.Fax ) );
}
}
}
}
应注意适用于 SQL Server 的 Microsoft .NET Framework 数据提供程序 (SqlClient) 与 SAP Sybase IQ .NET 数据提供程序在实现方式上存在一些细微差异。
1. 其中包括了新类 SAConnectionFactory(用于实现 IDbConnectionFactory)。创建任 何数据模型之前,将 Database.DefaultConnectionFactory 设置为 SAConnectionFactory 的实例,如下所示:
Database.DefaultConnectionFactory = new SAConnectionFactory();
2. Entity Framework Code First 的主要原则是按约定进行编码。Entity Framework 通过 编码约定推算数据模型。Entity Framework 还可隐式执行多项操作。有时,开发人 员可能不了解所有这些 Entity Framework 约定。不过,一些代码约定对 SAP Sybase IQ 无关紧要。SQL Server 和 SAP Sybase IQ 之间存在很大的差异。每个 SQL Server 实例可维护多个数据库,而每个 SAP Sybase IQ 数据库都是单个文件。
• 如果用户使用无参数构造函数创建用户定义的 DbContext,SqlClient 将通过集 成安全性连接到本地计算机上的 SQL Server Express。如果用户已经创建了登 录映射,则 SAP Sybase IQ 提供程序将使用集成登录连接到缺省服务器。
• 如果 Entity Framework 调用 DbDeleteDatabase 或 DbCreateDatabase(仅限于 SQL Server Express Edition),则 SqlClient 将删除现有数据库并创建新数据库。SAP Sybase IQ 提供程序从不删除或创建数据库。它只创建或删除数据库对象(表、 关系、约束等)。用户必须首先创建数据库。
• IDbConnectionFactory.CreateConnection 方法会将字符串参数 "nameOrConnectionString" 视为数据库名称(SQL Server 的初始目录)或连接 字符串。如果用户不为 DbContext 提供连接字符串,SqlClient 会将用户定义的 DbContext 类的命名空间用作初始目录,自动连接到本地计算机上的 SQL Express 服务器。对于 SAP Sybase IQ,此参数只包含连接字符串。此时将忽略数据库 名称,而使用集成登录。
3. SQL Server SqlClient API 会将带有数据标注属性 TimeStamp 的列映射到 SQL Server 的数据类型 timestamp/rowversion。开发人员有时会对 SQL Server timestamp/ rowversion 产生一些误解。SQL Server timestamp/rowversion 数据类型与 SAP Sybase IQ 和大多数其它数据库供应商不同:
• SQL Server timestamp/rowversion 采用二进制 (8)。它不支持组合的日期和时间 值。SAP Sybase IQ 支持名为 timestamp 的数据类型,该类型相当于 SQL Server 的 datetime 数据类型。
• SQL Server timestamp/rowversion 的值是唯一的。SAP Sybase IQ timestamp 的值 不是唯一的。
• 每次更新行后,SQL Server 的 timestamp/rowversion 值都将发生相应的变化。 SAP Sybase IQ 提供程序不支持 TimeStamp 数据标注属性。
4. 缺省情况下,Entity Framework 4.1 会始终将模式或所有者名称设置为 dbo,它是 SQL Server 的缺省模式。不过,dbo 不适用于 SAP Sybase IQ。对于 SAP Sybase IQ,必须使用数据标注或 Fluent API 根据表名指定模式名称(例如,GROUPO)。 以下提供了一个示例:
namespace CodeFirstTest
{
public class Customer
{
[Key()]
public int ID { get; set; }
public string SurName { get; set; } public string GivenName { get; set; } public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Country { get; set; }
public string PostalCode { get; set; } public string Phone { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
public class Contact
{
[Key()]
public int ID { get; set; }
public string SurName { get; set; } public string GivenName { get; set; } public string Title { get; set; } public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Country { get; set; }
public string PostalCode { get; set; } public string Phone { get; set; } public string Fax { get; set; }
[ForeignKey( "Customer" )]
public int CustomerID { get; set; }
public virtual Customer Customer { get; set; }
}
[Table( "Departments", Schema = "GROUPO" )] public class Department
{
[Key()]
public int DepartmentID { get; set; } public string DepartmentName { get; set; } public int DepartmentHeadID { get; set; }
}
public class Context : DbContext
{
public Context() : base() { }
public Context( string connStr ) : base( connStr ) { }
public DbSet<Contact> Contacts { get; set; } public DbSet<Customer> Customers { get; set; }
public DbSet<Department> Departments { get; set; }
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
"GROUPO" );
"GROUPO" );
}
modelBuilder.Entity<Contact>().ToTable( "Contacts",
modelBuilder.Entity<Customer>().ToTable( "Customers",
}
}
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------