sybase数据迁移记录,记录迁移中的问题以及知识点(一)
sybase必备技能
1、实例初始化(linux)
/sybase/ASE-15_0/init/sample_resource_files下存放了资源文件的模版,可以拷贝下面2个资源文件的模版进行修改。
srvbuild.adaptive_server.rs 数据库主服务
srvbuild.backup_server.rs 备份服务
然后执行/sybase/ASE-15_0/bin/srvbuild -r 资源文件的方式进行实例创建。
实例创建后需要修改/sybase/ASE-15_0/sysam下的服务名.properties文件中PE和LT的值与/sybase/SYSAM-2.0/licenses/XXX.lic license文件中的一致。否则一个月试用期过后,数据库会无法启动。
下面是个主服务资源文件的例子,绿色为需要修改的部分。
sybinit.release_directory: USE_DEFAULT
sybinit.product: sqlsrv
sqlsrv.server_name: JXGYRSSD
sqlsrv.sa_password: XXXXXXXX
sqlsrv.new_config: yes
sqlsrv.do_add_server: yes
sqlsrv.network_protocol_list: tcp
sqlsrv.network_hostname_list: 141.xx.xx.102
sqlsrv.network_port_list: 6000
sqlsrv.application_type: USE_DEFAULT
sqlsrv.server_page_size: 16K
sqlsrv.force_buildmaster: no
sqlsrv.master_device_physical_name: /database/rssddata/master.dat
sqlsrv.master_device_size: 370
sqlsrv.master_database_size: 240
sqlsrv.errorlog: /sybase/ASE-15_0/install/JXGYRSSD.log
sqlsrv.do_upgrade: no
sqlsrv.sybsystemprocs_device_physical_name: /database/rssddata/sysprocs.dat
sqlsrv.sybsystemprocs_device_size: 220
sqlsrv.sybsystemprocs_database_size: 220
sqlsrv.sybsystemdb_device_physical_name: /database/rssddata/systemp.dat
sqlsrv.sybsystemdb_device_size: 120
sqlsrv.sybsystemdb_database_size: 120
sqlsrv.tempdb_device_physical_name: /database/rssddata/tempdb.dat
sqlsrv.tempdb_device_size: 220
sqlsrv.tempdb_database_size: 220
sqlsrv.default_backup_server: JXGYRSSD_BS
下面是个备份服务资源文件的例子,绿色为需要修改的部分。
sybinit.release_directory: USE_DEFAULT
sybinit.product: bsrv
bsrv.server_name: abcd_bs
bsrv.new_config: yes
bsrv.do_add_backup_server: yes
bsrv.do_upgrade: no
bsrv.network_protocol_list: tcp
bsrv.network_hostname_list: 192.168.70.137
bsrv.network_port_list: 5001
bsrv.language: USE_DEFAULT
bsrv.character_set: USE_DEFAULT
bsrv.tape_config_file: USE_DEFAULT
bsrv.errorlog: USE_DEFAULT
#bsrv.addl_cmdline_parameters: PUT_ANY_ADDITIONAL_COMMAND_LINE_PARAMETERS_HERE
2、数据库修改字符集
1.安装utf8字符集到数据库
cd /sybase/charsets/utf8/
charset -SJXGYTJ -Usa -PXXXXXXXX binary.srt utf8
2.修改数据库字符集为utf8
isql -SJXGYTJ -Usa -PXXXXXXXX -w2000
1> sp_configure 'default character set id',190
2> go
3.重启数据库,数据库修改字符集成功后会自动关闭
4.启动数据库,检查服务器端字符集
isql -SJXGYTJ -Usa -PXXXXXXXX -w2000
1> sp_helpsort
2> go
3、数据库设备创建
disk init name = '数据设备名’,physname = '/设备文件路径/数据设备文件名', size = '大小'
disk init name = '日志设备名’,physname = '/设备文件路径/日志设备文件名', size = '大小'
4、数据库库创建
create database 库名 on 数据设备='大小' log on '日志设备’='大小'
5、数据库扩段空间
alter database on 数据设备= '大小'
alter database log on 日志设备= '大小'
6、数据库备份
dump database 库名 to '/备份路径/备份文件名'
7、备份有效性验证方法
load database ABC from '/备份路径/备份文件名' with headeronly
此命令并不真正进行load操作,只是读取一下备份文件头,可以用来验证备份是否可用。
8、数据库全库备份(拼SQL实现全库备份)
1.先写出2个备份的命令
dump database master to '/backup/master.dmp'
dump database JCSZ to '/backup/JCSZ.dmp'
可以看到除了库名部分,其他部分为固定字符串。而所有库的库名可以从通过select name from master..sysdatabases查询得到。
2.因此将不变的部分,用引号引起来(注意单双引号不要冲突),变量部分用查询语句从系统表中查询得到。char(10)表示回车
select "dump database "+name+" to '/备份路径/"+name+".dmp'"+char(10)+'go' from master..sysdatabases
9、数据库库备份单张表的方法(sqldbx/select * into/bcp)
1.SqlDbx导出单张表成insert语句
2.select * into 表名_bak from 表名
会自动创建一个叫表名_bak的表,同时插入数据。执行这个select * into命令的前提是备份表所在库要求开启'select into/bulkcopy/pllsort'属性。
可以通过sp_helpdb查看status的值。
同时可以通过下面命令开启
sp_dboption JCSZ ,'select into/bulkcopy/pllsort',true
3.bcp导出的方式备份
将YWST..T_MS_AJ导出到C:\T_MS_AJ.bcp文件
bcp YWST..T_MS_AJ out c:\T_MS_AJ.bcp -Utusc99 -P 99csut -c -t"<!!>" -r"<~~>" -T 20971520 -Jutf8 -S np -b 1000 -e C:\errorlog
将C:\T_MS_AJ.bcp中备份的数据导入恢复到YWST..T_MS_AJ表(导入不会删除表内已有数据,因此若恢复数据,需手动truncate表的数据)
bcp YWST..T_MS_AJ in c:\T_MS_AJ.bcp -Utusc99 -P 99csut -c -t"<!!>" -r"<~~>" -T 20971520 -Jutf8 -S np -Y -b 1000
-t每一列分隔符
-r每一行分隔符
-J导入时需要设置为服务器端字符集
-b是指每次导入多少行数据,不设置数据量大时,会导致数据库日志段满的问题。
10、数据库单个库的恢复
load database 库名 from '/备份路径/备份文件名'
go
online datbase 库名
go
11、数据库单个表的恢复
以恢复YWST中的T_MS_DSR的数据为例,说明步骤
- 建立临时设备,大小与原库一致
disk init name = 'TEMP1’,physname = '/database/TMP_DATA', size = '100M'
disk init name = 'TEMP2’,physname = '/database/TMP_LOG', size = '100M'
- 建立临时库YWST_TEMP
create database YWST_TEMP on TEMP1=100 log on TEMP2=100
- load恢复YWST的备份到YWST_TEMP库,并online
load database YWST_TEMP from '/backup/YWST.dmp'
go
online database YWST_TEMP
go
- 通过查询select * from YWST_TEMP..T_MS_DSR得到备份中的民事当事人表的数据,看情况进行全表恢复还是部分记录恢复。
- 删除YWST_TEMP库
drop database YWST_TEMP
- 删除建立的临时设备
sp_dropdevice TEMP1
go
sp_dropdevice TEMP2
go
12、数据库检查备份服务状态的方法
SYB_BACKUP…sp_who
可以得到查询结果,表示备份服务正常。若报如下错误,则需要检查备份服务:
Can't open a connection to site 'SYB_BACKUP'. See the error log file in the ASE
boot directory.
13、数据库更新统计值、整理碎片、清存储过程缓存任务计划的配置
更新统计值的语法
update all statistics 表名
批量生成更新统计值语句
select "update all statistics YYFZ.."+name+char(10)+"go" from YYFZ..sysobjects where type = 'U'
go
select "update all statistics YWST.."+name+char(10)+"go" from YWST..sysobjects where type = 'U'
go
select "update all statistics DB_ATY.."+name+char(10)+"go" from DB_ATY..sysobjects where type = 'U'
go
select "update all statistics JCSZ.."+name+char(10)+"go" from JCSZ..sysobjects where type = 'U'
go
整理碎片的语法
reorg rebuild 表名
批量生成整理碎片语句
select "reorg rebuild YYFZ.."+name+char(10)+"go" from YYFZ..sysobjects where type = 'U'
go
select "reorg rebuild YWST.."+name+char(10)+"go" from YWST..sysobjects where type = 'U'
go
select "reorg rebuild DB_ATY.."+name+char(10)+"go" from DB_ATY..sysobjects where type = 'U'
go
select "reorg rebuild JCSZ.."+name+char(10)+"go" from JCSZ..sysobjects where type = 'U'
go
针对特大表如几千万数据量,通过reorg rebuild命令一个晚上很可能无法执行完,影响第二天的业务。则可以换成下面的命令,表示执行整理碎片操作480分钟,然后停止。下次再运行可以继续上一次进行整理,分多个晚上完成单个大表的碎片整理工作。
reorg compact 表名 with resume, time=480
清存储过程缓存命令如下,建议配置到计划任务中定期执行,每5分钟执行一次。可以有效避免存储过程缓存占满导致的数据库cpu100%问题。
dbcc proc_cache(free_unused)
14、sybase 数据库查看blk阻塞锁、对应的进程、对应的应用及ip的方法
sp_lock 结果集中搜索blk,找到进程号,spid列的值
select program_name , ipaddr , * from master..sysprocesses where spid = 进程号
15、sybase 数据库通过进程号查看进程正在执行的SQL
dbcc traceon(3604)
go
dbcc sqltext(进程号)
go
16、sybase 数据库性能监控及参数使用情况监控
sp_sysmon ’00:01:00’ 性能监控
sp_monitorconfig ‘all’ 参数使用情况监控
17、sybase 各用户cpu使用情况监控
sp_clearstats
sp_reportstats 查询自上次执行sp_clearstats以来,各个数据库帐号使用的CPU占比情况。因此建议为每个应用建立单独的数据库帐号,这样可以得到每个应用所使用的数据库CPU占比情况。