Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
在数据库文件头页中存储用户指定的信息。
字符串(最多 128 字节)
空字符串
只能为 PUBLIC 组设置。设置立即生效。需要 DBA 权限。
可以在数据库文件头页中存储信息,以便以后通过从您的应用程序直接读取文件来抽取该信息。此页面存储在系统 dbspace 文件头中。如果为 OEM 字符串指定的值超过 128 字节,则会返回一个错误。
您可能会发现存储这类信息(例如模式版本、应用程序名称、应用程序版本等)很有用。或者,不启动数据库,应用程序可以使用 OEM 字符串确定数据库文件是否与应用程序相关联,或将应用程序设计为使用此信息确认数据库文件可供应用程序使用,方法是在使用数据库文件之前存储应用程序为进行验证而读取的字符串。您还可以抽取元数据以显示给用户。
要在系统 dbspace 文件头中设置 oem_string,请执行以下语句:
SET OPTION PUBLIC.oem_string=user-specified-string;
user-specified-string 值存储在 ISYSOPTION 系统表和系统 dbspace 文件标题中。在 SET OPTION 语句中指定字符串之前,必须在所需的字符集中定义该字符串,因为在 SET OPTION 语句中提供该字符串时,对该字符串不进行任何转换。可以使用 CSCONVERT 函数将字符串转换为所需的字符集。
您可以通过以下方法查询 oem_string 的值:
使用 oem_string 连接属性:
SELECT CONNECTION_PROPERTY( 'oem_string' );
使用 SYSOPTION 系统视图:
SELECT setting FROM SYSOPTION WHERE "option" = 'oem_string';
打开数据库系统 dbspace 文件。
将文件的第一页读取到缓冲区。
在缓冲区中搜索分别在 OEM 字符串前后的两字节前缀和后缀序列。
前缀和后缀字符串在 sqldef.h 中分别定义为 DB_OEM_STRING_PREFIX 和 DB_OEM_STRING_SUFFIX。这两个字符串之间的所有字节就是在数据库中定义的 OEM 字符串。
SQL Anywhere 在 oem_string 目录中包括两个示例程序:
dboem.cpp 为 C 程序,它说明如何抽取 OEM 字符串并将其打印到数据库服务器消息窗口。
dboem.pl 说明如何抽取 OEM 字符串并将其打印到 PERL 脚本内的 stdout。
应用程序不能在数据库中直接写入 OEM 字符串,因为这会损坏数据库文件头页。
在 Windows 中,服务器已加载数据库文件时,应用程序不能直接读取该文件。数据库服务器在该文件上有一个独占锁。但是,在任何受支持的 Unix 平台上,具有读权限的应用程序可以在任何时候直接读取该文件。对 OEM 字符串的更改不会在该文件中立即显示出来。发出检查点操作会使数据库服务器将页面 0 刷新到磁盘,并反映当前 OEM 字符串值。
如果在更改 OEM 字符串和下一个检查点操作之间数据库服务器失败,则文件头不会反映新 OEM 字符串值;新 OEM 字符串值将在数据库经过恢复后正确设置。
以下示例将包含有关数据库文件信息的 OEM 字符串进行加密并将其存储在数据库头文件中:
BEGIN DECLARE @v VARCHAR(100); SET @v = BASE64_ENCODE( ENCRYPT( 'database version 10', 'abc' ) ); EXECUTE IMMEDIATE 'SET OPTION PUBLIC.oem_string = ''' || @v || ''''; END;
您可以使用以下命令检索 OEM 字符串的值:
SELECT DECRYPT( BASE64_DECODE( CONNECTION_PROPERTY( 'oem_string' ) ),'abc' )