存档

2010年6月 的存档,文章数:11

在测试load tran with until_time 的时候出现了错误。

先执行:dump tran andkylee to "d:\andkylee_tran2.dmp" with no_truncate 然后,进行数据库的恢复。

先进行全库恢复,接着进行下面的日志恢复,并恢复到指定的时间点。

但是报下面的错误:

1> load tran andkylee from "d:\andkylee_tran2.dmp" with until_time='Jun 28 2010 5:24:10 PM'
2> go
Backup Server session id is:  111.  Use this value when executing the
'sp_volchanged' system stored procedure after fulfilling any volume change
request from the Backup Server.
Backup Server: 6.28.1.1: Dumpfile name 'ndkylee101790F554' section number 1
mounted on disk file 'd:\andkylee_tran2.dmp'
Backup Server: 4.58.1.1: Database andkylee: 75548 kilobytes LOADed.
Msg 623, Level 21, State 1:
Server 'TEST', Line 1:
Adaptive Server failed to retrieve a row via its RID in database 'andkylee'
because the target page is not a data page. Rid pageid = 0x16381; row num = 0x0.

Page pointer = 0x240FA000, pageno = 0, status = 0x300, ptnid = 99, indexid = 0,
level = 0.

用dbcc page查看pageid = 0x16381 的页面内容,发现此页面为日志页。页面号0x16381为十六进制,转化成十进制为:91009

今天下午作为公司的代表参加了南大通用数据技术有限公司在钓鱼台国宾馆举行的GBase 8a产品发布会。GBase 8a是国内首款具有自主知识产权的分析型数据库。

GBase 8a采用了列式存储、智能查询、高效压缩、双向并行、自适应优化等多项新技术,打破了以往提高性能只能靠增加数据库的容量,建很多索引的常规,使得 GBase 8a既有高性能又有很高的数据压缩比。宣称查询速度比传统关系型统数据库能够提升10倍以上,有5倍以上的存储压缩率。现在发布的单节点GBase 8a可以支撑大约10T的数据量,紧接着会发布GBase 8a的集群版本SN(share nothing)能存储100T级别的大规模数据量。

发布会现场展示了GBase 8a的卓越的查询性能。 模拟一个超市历年的销售数据,2张表,每张都有500亿多行的记录。 统计一下表内的行总数select count(*) from TABLE_NAME 只花了2秒左右的时间。的确够快的!还有,在聚合统计方面的速度更惊人,统计1994年2月1日至1994年2月28日之间的折扣率为5%到7%之间的 (包含5%,7%)的所有销售收入总和,(忘记了还有一个也是范围的条件),查询列是: sum(数量*价格),这个操作仅仅需要了6秒多点的时间。很惊讶!国产数据库能做到这个水平,不容易。GBase 8a采用列存储,使用智能索引技术,有一个称为数据包或者知识网格knowledge grid的东西。想不出来,用什么技术会产生这么惊人的结果。

好像,GBase 8a目前只能运行在64bit的unix平台上。比较经典的是运行在linux上,比如redhat,redflag(这和他们的ceo以前在redflag工作过不无关系,呵呵)。 好像aix上也有版本吧。windows平台上应该不支持。

以后,继续试用。

163 国内首款自主知识产权分析数据库今天问世

pchome 南大通用发布自主分析数据库GBase 8a

今天试验了一下不同ASE版本跨平台远程备份数据库的操作。

环境:

源数据端:solaris 10 SPARC 64bit,ASE 12.5.4,称为:server1

目的数据端:windows xp x86,ASE15.0.3,称为:server2

 

任务:

测试将源数据端solaris上的ASE数据库服务器里面的andkylee库远程备份到目的windows-xp机子上。


第一步:在server1的interfaces文件中添加远程服务器条目

在server2的连接接口配置文件%SYBASE%\ini\sql.ini中,备份服务器的名称为:TEST_BS.

在server1的 /db/sybase/ase1254/interfaces中添加:

TEST_BS
        master tcp ether 192.168.2.173 5001
        query tcp ether 192.168.2.173 5001

 

注意:添加到server1的远程备份服务器名称务必和server2中的备份服务器名称保持一致。

 

第二步:连接上server1的ASE服务器,添加远程备份服务器的条目

isql -Usa -P -Sase1254

sp_addserver TEST_BS

这一步不是必须的!

第三步:在server1的ASE中执行远程备份命令

dump database andkylee to "d:\andkylee_remote.dmp" at TEST_BS

可以使用stripe on进行远程备份文件分片,最大分片数为32。

如果想压缩远程备份文件的话,必须使用with compression=[0-9]选项;兼容选项compress::只支持本地备份。

最后检查,在远程服务器server2上D盘发现有远程备份生成的文件:andkylee_remote.dmp。 远程备份数据库操作完成!

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:ase cross-platform dump load solaris windows 跨平台 远程 备份恢复
————————————————————————————————-

AIX下mount一个iso文件的步骤:

mklv -y cdaix -s n -L /dev/cdaix rootvg 384M hdisk0
dd if=/sybase/sybaseAIX64BIT.iso of=/dev/cdaix bs=10m
mkdir /mnt/cdaix
mount -v cdrfs -o ro /dev/cdaix /mnt/cdaix

完成,加载点/mnt/aix内即为iso的内容。

Solaris下mount一个iso文件的步骤:

lofiadm (显示已用的设备名)

lofiadm -a /db/sybdata/rs1520solx64zhja.ISO /dev/lofi/2

lofiadm /dev/lofi/2   (查看刚才创建的附属的块设备)

mount -F hsfs -o ro /dev/lofi/2 /mnt  (用mount命令mount映像文件)

完成,加载点/mnt内即为iso的内容。

Linux下mount一个iso文件的步骤:

mount -t iso9660  -o loop ./wary-5.1.4.iso  /mnt/remove/

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字: aix solaris mount iso mklv dd lofiadm
————————————————————————————————-

在ASE12.5.x平台中没有替换字符串的函数,也就是说没有类似replace的函数。对于replace这个词,我想有编程经验的肯定一看字 面意思就知道是将某一字符串中指定的字符串替换为另外的字符串。可惜的是这么简单的功能在ase12.5.x中没有相应的函数,只有一个可怜的stuff 函数。

stuff函数仅仅能够替换某一个字符串中某一个位置处的字符串为另外的字符串,如果这个字符串中有多处需要被替换呢?抱歉,stuff歇菜了。

一个简单的类似replace的功能还得需要写个过程或者函数来实现。 写起来效率低执行起来效率更低, so pooor.

谁要是实现了用简单的一两条sql语句顶替replace的功能,麻烦告诉我一声。谢谢!

幸运的是,ASE15.0版本中引入了类似replace的函数,但是人家的名字叫str_replace,不知道为啥?replace这个词和那个关键字冲突吗? 不解ZZZZZZZ~~~

str_replace函数的语法很简单:

                     st_replace("string_expression1", "string_expression2", "string_expression3")

就是:将字符串1中所包含的所有 的字符串2都用字符串3统统替换。

一个简单的例子:

1> select str_replace('This is Andkylee!My nAme is andkylee!','A','a')
2> go
 -------------------------------------
 This is andkylee!My name is andkylee!
(1 row affected)

 

但是, 网上有人发帖说str_replace不能替换字符串中的空格为“(也就是说删除字符串中的所有空格)。不看官方文档,想当然的就写出来这样的语句:select str_replace('123 456 ',' ','')

但是很可惜,执行失败。

1> select len('123 456 '),str_replace('123 456 ',' ','') ,len(str_replace('123 456 ',' ',''))
2> go
 ----------- -------- -----------
           8 123 456            8
(1 row affected)

 

如上可以看到select str_replace('123 456 ',' ','')并没有替换其中的空格为空(亦即删除其中的所有空格),用函数str_replace执行前后的字符串是相同的。

通过查阅官方文档中关于str_replace的介绍,有下面的两点需要注意:

1. Adaptive Server 将空字符串常量自动转换为 1 个空格的字符串,以便将该字符串与 NULL 值区分开。

2. str_replace 在第三个参数中接受 NULL,将其视为尝试用 NULL 替换 string_expression2,有效地将 str_replace 转换成“字符串切除”
操作。

这两条的意思是说:在函数str_replace中""相当于" ", NULL 相当于“”(空字符)。

 ""相当于" "

示例:

1> select str_replace("cde fghi ","","_")
2> go
 ---------
 cde_fghi_
(1 row affected)
1> select str_replace("cde fghi "," ","_")
2> go
 ---------
 cde_fghi_
(1 row affected)

 

两个空格还是2个空格意思:

1> select str_replace("cde fghi ","  ","_")
2> go

 ---------
 cde fghi

(1 row affected)

NULL 相当于“”(空字符)

示例如下:

1> select str_replace("cde fghi "," ",null),len(str_replace("cde fghi "," ",null))
2> go
 --------- -----------
 cdefghi             7
(1 row affected)
1> select str_replace("cde fghi ","",null),len(str_replace("cde fghi "," ",null))
2> go
 --------- -----------
 cdefghi             7
(1 row affected)

 

总结:

在函数str_replace中NULL 相当于“”(空字符),""相当于" " 。其它都是正常的。

通过本文中的例子,可以看出Sybase ASE中存在一些不太符合常规习惯的地方。

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:str_replace 15.0 null 空格 替换
————————————————————————————————-

一、添加镜像

为master设备添加镜像设备:

1> disk mirror
2> name='master',
3> mirror='D:\sybase\data\master_mirr.dat'
4> go
Msg 5155, Level 16, State 1:
Server 'TEST', Line 1:
The command 'DISK MIRROR' cannot be executed since disk mirroring has been
disabled. In order to enable disk mirroring, use: sp_configure 'disable disk
mirroring',0 and restart the server.

 

ASE默认是关闭设备镜像功能的,需要配置参数启用。disable disk mirroring 这是一个静态参数,配置完之后需要重启ASE服务器。

1> sp_configure "disable disk mirroring",0
2> go
 Parameter Name                 Default     Memory Used Config Value
         Run Value    Unit                 Type
 ------------------------------ ----------- ----------- ------------
         ------------ -------------------- ----------
 disable disk mirroring                   1           0            0
                    1 switch               static
(1 row affected)
Configuration option changed. Since the option is static, Adaptive Server must
be rebooted in order for the change to take effect.
Changing the value of 'disable disk mirroring' to '0' reduces the amount of
memory ASE uses by 18636 K. The reduced memory may be reused when this configure
value changes, but will not be released until ASE restarts.
(return status = 0)

 

重启ASE服务器之后。

执行命令镜像master设备

1> disk mirror
2> name='master',
3> mirror='D:\sybase\data\master_mirr.dat'
4> go
Creating the physical file for the mirror...
Starting Dynamic Mirroring of 20480 pages for logical device 'master'.
         512 pages mirrored...
        1024 pages mirrored...
        1536 pages mirrored...
        2048 pages mirrored...
        2560 pages mirrored...
        3072 pages mirrored...
        3584 pages mirrored...
        4096 pages mirrored...
        4608 pages mirrored...
        5120 pages mirrored...
        5632 pages mirrored...
        6144 pages mirrored...
        6656 pages mirrored...
        7168 pages mirrored...
        7680 pages mirrored...
        8192 pages mirrored...
        8704 pages mirrored...
        9216 pages mirrored...
        9728 pages mirrored...
The remaining 10752 pages are currently unallocated and will be mirrored as they
are allocated.
1>

 

成功完成!

利用过程sp_helpdevice查看master设备目前的状态。

1> sp_helpdevice master
2> go
 device_name physical_name
         description
         status cntrltype vdevno vpn_low vpn_high
 ----------- -------------------------
         -------------------------------------------------------------------------
         ------ --------- ------ ------- --------
 master      D:\sybase\data\master.dat
         file system device, special, MIRROR ENABLED, mirror = 'D:\sybase\data\m
         aster_mirr.dat',
serial writes, dsync on, directio off, reads mirrored,
          default disk, physical disk, 80.00 MB, Free: 42.00 MB
            739         0      0       0    40959
(1 row affected)
 dbname      size          allocated           vstart lstart
 ----------- ------------- ------------------- ------ ------
 master           26.00 MB Dec  2 2009  6:58PM      4      0
 model             6.00 MB Dec  2 2009  6:58PM  13316      0
 sybsystemdb       6.00 MB Dec  2 2009  6:58PM  19460      0
(1 row affected)
(return status = 0)

 

下面来解析一下被镜像后master设备的状态字段。

master设备被镜像后,在sysdevices系统表中并没有增加记录行;仅仅是更新了master设备对应的记录行中的status和mirrorname两个字段的内容。

1> select * from sysdevices
2> where name='master'
3> go
 low         high        status cntrltype name                           phyname                                                                                                                         mirrorname                                                                                                                      vdevno      crdate                     resizedate                 status2
 ----------- ----------- ------ --------- ------------------------------ ------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- ----------- -------------------------- -------------------------- -----------
           0       40959    739         0 master                         D:\sybase\data\master.dat                                                                                                       D:\sybase\data\master_mirr.dat                                                                                                            0        Dec  2 2009  6:58PM        Mar 27 2010  4:32PM           0
(1 row affected)
1>
 

从上面可以看出master设备对应的status变成了739。status字段用bit位来表示各个状态的信息。

739 = 1 + 2 + 32 + 64 + 128 + 512

其中:

1:缺省磁盘; 

2:物理磁盘 

32:串行写 

64:设备已镜像 

128: 读已镜像

512:已允许镜像

这几个状态和sp_helpdevice master 中查看到的相一致。 呵呵, 要是看过sp_helpdevice的源代码的话,自然很好理解。

 

二、取消镜像

unmirror分两种情况:user-initiated 和 system-initiated 。 在镜像设备上如果出现了IO错误会导致系统自动取消该设备的镜像。

用户手动取消镜像的语法为:

 disk unmirror

name="logical_device_name"

[,side={"primary"|secondary}]

[,mode={retain|remove}]

其中side和mode两个选项是可选的。side的默认值为:secondary,意思是取消哪一边的镜像设备(有主设备和镜像设备两个)。 mode的默认值是retain,意思是本次取消是临时的(retain,下次还可以激活设备以再次用来镜像)还是永久的(remove,删除设备了)。

下面测试临时取消master设备的镜像功能!

1> disk unmirror
2> name='master',side=secondary,mode=retain
3> go
1>

 

执行完,没有任何提示信息。在errlog文件中看到有这么一条信息:00:00000:00030:2010/06/07 13:20:59.59 kernel  Closing the secondary device for virtual device master

现在再来看看master设备的状态信息:

1> sp_helpdevice master
2> go
 device_name physical_name             description                                                                                                                                                                                           status cntrltype vdevno vpn_low vpn_high
 ----------- ------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ --------- ------ ------- --------
 master      D:\sybase\data\master.dat file system device, special, MIRROR DISABLED, mirror = 'D:\sybase\data\master_mirr.dat', serial writes, dsync on, directio off, reads mirrored, default disk, physical disk, 80.00 MB, Free: 42.00 MB   2275         0      0       0    40959
(1 row affected)
 dbname      size          allocated           vstart lstart
 ----------- ------------- ------------------- ------ ------
 master           26.00 MB Dec  2 2009  6:58PM      4      0
 model             6.00 MB Dec  2 2009  6:58PM  13316      0
 sybsystemdb       6.00 MB Dec  2 2009  6:58PM  19460      0
(1 row affected)
(return status = 0)
1> select * from sysdevices where name='master'
2> go
 low         high        status cntrltype name                           phyname                                                                                                                         mirrorname                                                                                                                      vdevno      crdate                     resizedate                 status2
 ----------- ----------- ------ --------- ------------------------------ ------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- ----------- -------------------------- -------------------------- -----------
           0       40959   2275         0 master                         D:\sybase\data\master.dat                                                                                                       D:\sybase\data\master_mirr.dat                                                                                                            0        Dec  2 2009  6:58PM        Mar 27 2010  4:32PM           0
(1 row affected)
1>
 

sp_helpdevice显示master设备已被MIRROR DISABLED。 sysdevices系统表中master对应的status列为:2275 = 2048 + 128 + 64 + 32 + 2 + 1 。状态为2048表示镜像已禁用(内部使用)。


三、重新激活镜像

语法:disk remirror name="logical_device_name"

在设备的镜像功能因为用户或者系统的缘故而被中止时,可以利用此命令恢复设备上的镜像功能。发出该命令后,ASE服务器会将镜像主设备上的数据拷贝到镜像次设备上面去。

恢复本文上面暂时取消的master上的镜像。

1> disk remirror
2> name='master'
3> go
Starting Dynamic Mirroring of 20480 pages for logical device 'master'.
         512 pages mirrored...
        1024 pages mirrored...
        1536 pages mirrored...
        2048 pages mirrored...
        2560 pages mirrored...
        3072 pages mirrored...
        3584 pages mirrored...
        4096 pages mirrored...
        4608 pages mirrored...
        5120 pages mirrored...
        5632 pages mirrored...
        6144 pages mirrored...
        6656 pages mirrored...
        7168 pages mirrored...
        7680 pages mirrored...
        8192 pages mirrored...
        8704 pages mirrored...
        9216 pages mirrored...
        9728 pages mirrored...
The remaining 10752 pages are currently unallocated and will be mirrored as they are allocated.
1>
 

在errorlog文件中有下面的日志内容:00:00000:00030:2010/06/07 13:31:03.26 kernel  mirror for virtual device 0 started using asynchronous (with DIRECTIO) I/O

再次查看status状态信息,

1> select name,status,phyname,mirrorname from sysdevices where name='master'
2> go
 name                           status phyname                                                                                                                         mirrorname
 ------------------------------ ------ ------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------
 master                            739 D:\sybase\data\master.dat                                                                                                       D:\sybase\data\master_mirr.dat
(1 row affected)

 

可以看到重新恢复镜像后,master设备的status状态信息和刚开始添加镜像时相同。个人感觉重新激活镜像(remirror)和新添加镜像 已经是一样的。只是不用告诉系统镜像到什么位置了而已;还有初次镜像的时候secondary设备文件必须不存在而激活镜像则相反。

 

四、利用镜像功能来移动设备的物理位置

可以利用镜像功能将数据库设备移动到其它物理位置。比如设备A原来在C盘,要是将其移动到D盘。 需要两个步骤:

1.将设备A镜像到D盘的设备文件上;

2.取消设备A在C盘的主镜像文件。

下面演示将tempdb的设备文件由D:\sybase\data\tempdbdev.dat移动到D:\syb_data\tempdbdev.dat

1> disk mirror
2> name='tempdbdev',
3> mirror='d:\syb_data\tempdbdev.dat'
4> go
Creating the physical file for the mirror...
Starting Dynamic Mirroring of 51200 pages for logical device 'tempdbdev'.
         512 pages mirrored...
        1024 pages mirrored...
        1536 pages mirrored...
        2048 pages mirrored...
        2560 pages mirrored...
        3072 pages mirrored...
        3584 pages mirrored...
        4096 pages mirrored...
        4608 pages mirrored...
        5120 pages mirrored...
        5632 pages mirrored...
        6144 pages mirrored...
        6656 pages mirrored...
        7168 pages mirrored...
        7680 pages mirrored...
        8192 pages mirrored...
        8704 pages mirrored...
        9216 pages mirrored...
        9728 pages mirrored...
       10240 pages mirrored...
       10752 pages mirrored...
       11264 pages mirrored...
       11776 pages mirrored...
       12288 pages mirrored...
       12800 pages mirrored...
       13312 pages mirrored...
       13824 pages mirrored...
       14336 pages mirrored...
       14848 pages mirrored...
       15360 pages mirrored...
       15872 pages mirrored...
       16384 pages mirrored...
       16896 pages mirrored...
       17408 pages mirrored...
       17920 pages mirrored...
       18432 pages mirrored...
       18944 pages mirrored...
       19456 pages mirrored...
       19968 pages mirrored...
       20480 pages mirrored...
       20992 pages mirrored...
       21504 pages mirrored...
       22016 pages mirrored...
       22528 pages mirrored...
       23040 pages mirrored...
       23552 pages mirrored...
       24064 pages mirrored...
       24576 pages mirrored...
       25088 pages mirrored...
       25600 pages mirrored...
       26112 pages mirrored...
       26624 pages mirrored...
       27136 pages mirrored...
       27648 pages mirrored...
       28160 pages mirrored...
       28672 pages mirrored...
       29184 pages mirrored...
       29696 pages mirrored...
       30208 pages mirrored...
       30720 pages mirrored...
       31232 pages mirrored...
       31744 pages mirrored...
       32256 pages mirrored...
       32768 pages mirrored...
       33280 pages mirrored...
       33792 pages mirrored...
       34304 pages mirrored...
       34816 pages mirrored...
       35328 pages mirrored...
       35840 pages mirrored...
       36352 pages mirrored...
       36864 pages mirrored...
       37376 pages mirrored...
       37888 pages mirrored...
       38400 pages mirrored...
       38912 pages mirrored...
       39424 pages mirrored...
       39936 pages mirrored...
       40448 pages mirrored...
       40960 pages mirrored...
       41472 pages mirrored...
       41984 pages mirrored...
       42496 pages mirrored...
       43008 pages mirrored...
       43520 pages mirrored...
       44032 pages mirrored...
       44544 pages mirrored...
       45056 pages mirrored...
       45568 pages mirrored...
       46080 pages mirrored...
       46592 pages mirrored...
       47104 pages mirrored...
       47616 pages mirrored...
       48128 pages mirrored...
       48640 pages mirrored...
       49152 pages mirrored...
       49664 pages mirrored...
       50176 pages mirrored...
       50688 pages mirrored...
       51200 pages mirrored...
1> disk unmirror
2> name='tempdbdev',
3> side='primary',
4> mode=remove
5> go
1> sp_helpdevice tempdbdev
2> go
 device_name physical_name             description                                                                                  status cntrltype vdevno vpn_low vpn_high
 ----------- ------------------------- -------------------------------------------------------------------------------------------- ------ --------- ------ ------- --------
 tempdbdev   d:\syb_data\tempdbdev.dat file system device, special, dsync on, directio off, physical disk, 200.00 MB, Free: 0.00 MB  16386         0      2       0   102399
(1 row affected)
 dbname size          allocated           vstart lstart
 ------ ------------- ------------------- ------ ------
 tempdb     100.00 MB Dec  2 2009  7:01PM      0      0
 tempdb      50.00 MB Dec  8 2009 11:16AM  51200  25600
 tempdb      50.00 MB Dec  8 2009 11:16AM  76800  38400
(1 row affected)
(return status = 0)
1> select name,status,phyname,mirrorname from sysdevices where name='tempdbdev'
2> go
 name                           status phyname                                                                                                                         mirrorname
 ------------------------------ ------ ------------------------------------------------------------------------------------------------------------------------------- -------------
 tempdbdev                       16386 d:\syb_data\tempdbdev.dat                                                                                                       NULL
(1 row affected)
1>
 

对应于errorlog中的信息为: 00:00000:00030:2010/06/07 13:45:33.34 kernel  mirror for virtual device 2 started using asynchronous I/O
00:00000:00030:2010/06/07 13:46:56.00 kernel  Closing the primary device for virtual device tempdbdev
00:00000:00030:2010/06/07 13:46:56.00 kernel  The new primary device is now d:\syb_data\tempdbdev.dat

其中status:16386 = 16384 + 2 这是一个普通的物理设备文件。

 

五、对master设备进行镜像的另外一种方法

对master设备镜像还有一种方法,就是直接利用命令参数。 windows下sqlsrvr.exe的参数中有个是: -r mirror_file          - master device's mirror device name

可以修改RUN_SEVERNAME文件来加入-r这个参数来镜像master设备。

如改为:

D:\sybase\ASE-15_0\bin\sqlsrvr.exe  -dD:\sybase\data\master.dat -sTEST -eD:\sybase\ASE-15_0\install\TEST.log -iD:\sybase\ini -MD:\sybase\ASE-15_0 -rd:\syb_data\master_mirr.dat

 

在windows下的ASE还需要修改注册表中的配置信息, 才能用系统工具中的服务正常启动数据。 不过你要是习惯每次都用RUN_SERVERNAME这个命令行来启动数据库的话, 也不用改注册表了。至于如何改注册表, 本篇暂时不介绍。

好了,关于ASE中的mirror就介绍这么多吧。

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:mirror unmirror remirror 镜像  移动设备
————————————————————————————————-

本人的pc机上装的数据库比较多。有:oracle 10g,MySQL5.0.45,Sybase ASE15.0.3,Sybase IQ15.1,MSSQLSERVER2005,MSSQLSERVER2000,Sybase Anywhere8,Sybase Anywhere9,Sybase Anywhere10等等。还有非安装版的Sybase ASE12.5.x,ASA5,ASA6等。

数据库比较多,都通过系统工具中的服务项来启动不太现实。有时用到的时候直接用命令行启动,这样挺方便。注册表信息也省得维护了。

最近,在用SQLSERVER2005 management studio读取表数据的时候,报了下面的两个错误。

在对象资源管理器中找到sqlserver2000数据库中的用户表,点右键“打开表”报错如下:

标题: Microsoft SQL Server Management Studio
------------------------------
调用的目标发生了异常。 (SQLEditors)
------------------------------
其他信息:
找不到请求的 .Net Framework 数据提供程序。可能没有安装。 (System.Data)
 

在对象资源管理器中找到sqlserver2005中某个用户数据库中的用户表,点右键“打开表”报错如下:

标题: Microsoft SQL Server Management Studio
------------------------------
调用的目标发生了异常。 (SQLEditors)
------------------------------
其他信息:
创建 system.data 的配置节处理程序时出错: 列“InvariantName”被约束为是唯一的。值“iAnywhere.Data.SQLAnywhere”已存在。 (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Config\machine.config line 126) (System.Configuration)
------------------------------
列“InvariantName”被约束为是唯一的。值“iAnywhere.Data.SQLAnywhere”已存在。 (System.Data)
 

问题怎么解决呢?

在网上搜索了很多,有说和MySQL有关的。的确我的pc上有MySQL5.0.45。但是将MySQL的相关项目去掉还是不管用。这些链接如下,

大家可以参考下:

找不到请求的 .Net Framework 数据提供程序。可能没有安装。

MySql “找不到请求的 .Net Framework 数据提供程序。可能没有安装。”解决方法

ASP.NET 2.0中如何连接到Mysql

根据访问sqlserver2005数据库时的报错,可能和.NET FRAMEWORK的配置文件有关系。查看C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 下的machine.config文件。发现的DbProviderFactories节下的最后四个项目为:

  <add name="SQL Anywhere 10 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 10" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere,  Version=10.0.1.34152, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />
     
     <add name="SQL Anywhere UltraLite.NET 10 Data Provider" invariant="iAnywhere.Data.UltraLite" description=".Net Framework Data Provider for SQL Anywhere UltraLite.NET 10" type="iAnywhere.Data.UltraLite.ULFactory, iAnywhere.Data.UltraLite,  Version=10.0.1.3415, Culture=neutral, PublicKeyToken=ff11483eb5a8c1a5" />
     
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
     
     <add name="SQL Anywhere 11 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 11" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere, Version=2, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />

根据列"InvariantName"被约束为是唯一的。值"iAnywhere.Data.SQLAnywhere"已存在。观察到SQL Anywhere 10 Data Provider 和 SQL Anywhere 11 Data Provider 这两个项目下的 invariant 都是 "iAnywhere.Data.SQLAnywhere",尝试着将"SQL Anywhere 11 Data Provider"项目删除 ,然后重新打开management studio,问题解决。

总结一下:问题不在于微软的.NET FRAMEWORK3.5的安装时间先后的问题, 是Sybase公司的Anywhere起的驱动程序名称的问题。iAnywhere.Data.UltraLite 就没问题。 为什么SQL Anywhere 10和SQL Anywhere 11 都对应一样相同的Invariant名称呢?

如果ASA10和ASA11都装在一台机器上,就肯定会出现这个问题。 不敢把SQL Anywhere 11 Data Provider对象的 invariant改为:iAnywhere.Data.SQLAnywhere11。反正我也不做数据库开发,我只关系数据库管理方面的。 二者取其一,将SQL Anywhere 11 Data Provider项目暂时注释掉,

 <!-- <add name="SQL Anywhere 11 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 11" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere, Version=2, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />  -->

保存machine.config,重新启动management studio。 问题解决。 o(≧v≦)o~~

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:ASA 10 11 SQLSERVER management studio  DbProvider InvariantName
————————————————————————————————-

本文给出sybase IQ15.1试用版在试用一个月到期之后继续试用的两种方法。

第一种:删除注册表后重新安装

Sybase IQ作为数据分析以及数据仓库的一款数据库管理系统,目前最新版本为15.5。我手头上使用的这份为公司从sybase公司那里领用的试用版,有效期只有一个月。

Sybase IQ15.1 for windows的安装介质CD光盘包含32bit和64bit两类平台的安装程序。我在自己的windows-xp(32bit)上安装了sybase IQ15.1。在安装过程中要求选择产品类型的时候,我从两个备选项:开发版和体验版中选择了开发版,一个月之后sybase IQ就启动不起来了,报没有可用license的问题。

在我的pc上ASE15.0.3和IQ15.1是共用d:\sybase这个%SYBASE%目录的,所以默认的认证文件夹也在D:\sybase \SYSAM-2_0,该文件夹内只有一个文件:SYBASE_ASE_DE.lic;且这个文件的修改日期也是很早之前了。心里有点疑惑。

不管三七二十一先重装一遍IQ再说,结果装完之后,原来的iq库还是因为没有可用license而启动不起来。心里很窝火哦。

又想到一个办法,把sybase IQ的注册表项目都删除,然后又重装了一遍,这次IQ可以启动起来了。 

步骤如下:

第一步:删除sybase IQ的相关服务项目

在控制面板>管理工具>服务里面,我发现对于sybase IQ数据库仅有一个相关的服务: Sybase IQ Agent 15.1。在这一服务名Sybase IQ Agent 15.1上点右键,查看其属性,得知其服务名称为:SybaseIQAgent15。 实际上,SybaseIQAgent15此名即为该项服务的ServiceKeyName。

要想删除windows系统中的系统服务, 除了用其它的管理工具外, 系统自带了一个命令行工具sc。语法为:

C:\Documents and Settings\Administrator>sc delete
DESCRIPTION:
        Deletes a service entry from the registry.
        If the service is running, or another process has an
        open handle to the service, the service is simply marked
        for deletion.
USAGE:
        sc <server> delete [service name]

 

直接执行: sc delete SybaseIQAgent15 就可以删除此iq代理服务了。

第二步:删除的注册表项目

在开始>运行里面输入regedit打开注册表编辑器。 

定位到:HKEY_CURRENT_USER\Software\SYBASE 下面将IQ相关的子项删除,其它的不要删错了。

然后将下面的四项都删除。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Sybase_IQ_15

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SybaseIQAgent15

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Sybase_IQ_15

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SybaseIQAgent15

之后,个人感觉为了使得上述删除生效,最好重启一下系统。我是在没重启的情况下也再次成功安装了iq15.1。

最好就是按照sybase IQ15.1了,安装过程比ASE简单多了。 因为IQ的安装过程中不牵涉到配置服务器,仅仅复制了安装程序而已。

最后启动IQ的时候,竟然成功了。 呵呵!

ps:我的pc上是先安装了ASE15.0.3,sybase的根目录是d:\sybase 。sybase的license文件是放在D:\sybase\SYSAM-2_0\licenses里面的。但是,我发现安装完iq后这个文件的修改日 期没有变,也就是说iq安装程序可能没有修改这个文件。心里一直疑惑:sybase IQ是怎么判断试用一个月到期的?

 

第二种: 调整系统时间

查看Sybase IQ15.1数据库的日志文件*.iqmsg,发现有下面的提示信息:

I. 04/30 15:07:33. 0000000000 License feature name:  IQ_SECURITY
I. 04/30 15:07:33. 0000000000 License search path:   D:\sybase\SYSAM-2_0\licenses\SYBASE_ASE_DE-Original.lic;
I. 04/30 15:07:33. 0000000000    D:\sybase\SYSAM-2_0\licenses\SYBASE_ASE_DE.lic;D:\sybase\SYSAM-2_0 -
I. 04/30 15:07:33. 0000000000    \licenses\SySAMLicenseServer.lic;D:\sybiq\*.lic
I. 04/30 15:07:33. 0000000000 FLEXnet Licensing error:-5,357
I. 04/30 15:07:33. 0000000000 For further information, refer to the Sybase Software Asset Management website at http://www.sybase.com/sysam
I. 04/30 15:07:33. 0000000000 WARNING: Sybase IQ functionality that requires the IQ_SECURITY license will be disabled on Sat May 01 00:00:00 2010, unless a suitable IQ_SECURITY license is obtained before that date.

 

是windows-xp的系统时间调整为早于:2010-05-01。最后再次启动数据库的时候,竟然启动成功了。不知道此种方法是否通用?

另外,在Sybase官网上只能下载到最新版的IQ,之前版本的介质官网不提供下载链接。想试用Sybase IQ,请联系Sybase公司,他们的销售会很热心的帮助解决的。毕竟这是帮着他们拓展市场嘛!Sybase北京公司的联系电话:(010)59215888

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:IQ 15.1 license outdate 试用 过期
————————————————————————————————-