- 论坛徽章:
- 34
|
Start of topic | Skip to actions
Sybase ASE 常见问与答
为什么生产环境不要设置 truncate log on checkpoint?
有些用户贪图简便,在生产环境中设置了 truncate log on checkpoint 。其原意不外是避免因写满日志而导致的业务停顿。殊不知,这样的设置可能带来不可挽回的灾难。因为当事务被截断后,从最近一次全备到当前的事务均不可能再恢复了!如果这期间出现问题,如磁盘损坏,则将导致大量数据丢失。 在生产环境中,应通过配置合理的备份策略来进行全备和增量备份。典型的策略是每周一次全备,每天一次增量备份。用户应根据自身应用的实际情况(数据量、数据增量、数据重要性等因素),合理调整,如改为一天两次增量备份。如果需要大量导入数据,可能写满日志,那么可能临时设置 truncate log on checkpoint,但需要注意的是:完成数据导入后,应立即取消此设置,并马上进行全备。
如何分离日志与数据?
1、备份数据库,包括 master 和你要分离数据与日志的应用库(废话,根据Sybase ASE 系统管理员日常维护指南,这一步是必不可少,以至于不用写出来的步骤); 2、检查日志是否有单独的存放设备,如有,则直接到第5步; 3、增加一个设备:disk init .....; 4、alter database db_name log on new_log_device=xxx 5、sp_dropsegment logsegment, db_name, device_name 6、查看是否已分离(sp_helpdb或sp_helplog); 需要注意的是,执行 sp_helplog 会提示以下类似信息:No valid log device can be found to contain the starting logpage of 'xxxx', on database 'xxxxx'. Perhaps the segment mapping of database has changed recently. Please inspect the sysusages catalog and contact your system administrator. 你大可不必紧张。段(segment)只是管理以后如何为对象分配空间,增加和删除 segment 并不移动当前的已分配空间。日志至少有一个扩充(extend)位于以前的 segment 上(还记得吗,为对象分配存贮单元时,实际是以 extend 为单位的。)。如果当前 extend 被填满,需要再为日志分配时,ASE会在新的 segment 上分配(segment 约束它不得不这么做)。此时,截断日志就可以回收以前分配的 extend 了。 7、因此,如果不想看到 sp_helplog 的“错误输出”,你可以创建一个临时表,然后往面插入足够的数据,然后截断日志; 8、老规矩,也是很重要的一步:备份数据库,包括 master 和你分离数据与日志的应用库。
新安装ASE或新建服务后,无法连接备份服务器
在安装ASE或新建服务后,试图 load 或 dump 数据库时,总是提示如下信息:
Can't open a connection to site 'SYB_BACKUP', See the error log file in the SQL Server boot directory.
error code = 7205
通常,这是由于 ASE 安装/服务初始化程序的 BUG 导致的。在创建服务时,ASE 会创建一个名为类似 XXXX_BS 的备份服务,同时会在 master..sysservers 中插入一条对应记录。以服务名 FLYBAEN 为例,下面是 interfaces 文件和 sysservers 中的记录:
interfaces 文件内容:
FLYBEAN_BS
master tcp ether FLYBEAN_LINUX 5001
query tcp ether FLYBEAN_LINUX 5001
sysservers 的记录:(select srvname, srvnetname from sysservers where srvname='SYB_BACKUP')
srvname srvnetname
------------------------------ --------------------------------
SYB_BACKUP FLYBEAN_BS
通常默认的备份服务器就是 SYB_BACKUP。在 load/dump 时,ASE 通过 sysservers 获取备份服务器对应 interfaces 的信息,然后在 interfaces 文件中搜索该服务的实际位置(IP和端口)。在此例中,ASE 通过 sysservers 得到 interfaces 中的服务名为 FLYBEAN_BS,然后在interfaces 中获取该服务的物理信息。如果 ASE 无法通过 sysservers 中的 srvnetname 在 interfaces 中获取相关信息,则会报上面的错误。 那么解决办法就是非常简单的。 方法一:修改 interfaces 文件,将服务名改为 sysservers.srvnetname 对应的值; 方法二:修改 sysservers 中相应记录的 srvnetname 的值为 interfaces 文件中的服务名。
如何配置异地备份?
自 11.9.2(待确认) 开始,ASE 支持异地备份,具体方法举例如下: 假设两台 ASE 数据库服务器,分别为 A 和 B,数据库服务分别为:SRV_A, SRV_A_BS; SRV_B, SRV_B_S。我们要把 B 上的数据库 DB_1 备份到 A 上。 1. 修改 B 上的 interfaces 文件,增加 SRV_A_BS 的配置,如:
SRV_A_BS
master tcp ether A BS_PORT
query tcp ether A BS_PORT
2.用 isql 登录 SRV_B,为 SRV_B 增加一个远程服务:SRV_A_BS sp_addserver "SRV_A_BS",null,"SRV_A_BS" 3.测试:dump database DB_1 to 在 A 上的路径及文件名 at "SRV_A_BS" |
|