Migrate master database from ASE 12.5 to 15.0.2
From SybaseWiki
Migration of the master database from a 12.5 server into a 15.0.2 server can be done by extracting the required information from the old server and inserting it into the new 15.0.2 server.
Below you will find a script that does this for you.
#!/bin/sh if [ $# != 6 ] then echo "Usage: $0 <source> <source-login> <source-passwrd> <target> <target-login> <target-password>" exit 1 fi SOURCE="$1" SOURCE_USER="$2" SOURCE_PWD="$3" TARGET="$4" TARGET_USER="$5" TARGET_PWD="$6" isql -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} <<EOF use tempdb go if exists( select 1 from sysobjects where name = "my_syslogins") drop view my_syslogins go create view my_syslogins as select *,null as lastlogindate,getdate() as crdate,null as locksuid,null as lockreason,null as lockdate from master..syslogins where suid > 2 go if exists( select 1 from sysobjects where name = "my_remotelogins") drop view my_remotelogins go create view my_remotelogins as select * from master..sysattributes where object_type = "EL" go if exists( select 1 from sysobjects where name = "my_userroles") drop view my_userroles go create view my_userroles as select * from master..sysattributes where object_type = "UR" go if exists( select 1 from sysobjects where name = "my_sysloginroles") drop view my_sysloginroles go create view my_sysloginroles as select * from master..sysloginroles where suid > 2 go if exists( select 1 from sysobjects where name = "my_sysroles") drop view my_sysroles go create view my_sysroles as select * from master..sysroles where id >= 32 go if exists( select 1 from sysobjects where name = "my_sysservers") drop view my_sysservers go create view my_sysservers as select *,null as srvstatus2 from master..sysservers where srvname != "SYB_BACKUP" and srvname not like "%_migrate" and srvclass != 0 -- local server go if exists( select 1 from sysobjects where name = "my_syssrvroles") drop view my_syssrvroles go create view my_syssrvroles as select * from master..syssrvroles where srid >= 32 go if exists( select 1 from sysobjects where name = "my_sysusers_1") drop view my_sysusers_1 go create view my_sysusers_1 as select * from master..sysusers su where su.suid > 2 and exists( select 1 from master..syslogins sl where sl.suid = su.suid) go if exists( select 1 from sysobjects where name = "my_sysusers_2") drop view my_sysusers_2 go create view my_sysusers_2 as select su.* from master..sysusers su, master..sysroles sr where su.uid = sr.lrid and sr.id >= 32 go EOF echo "Press <ENTER> to continue" ; read OK bcp tempdb..my_syslogins out syslogins.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -c bcp master..sysalternates out sysalternates.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp master..sysremotelogins out sysremotelogins.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_remotelogins out remotelogins.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -c bcp tempdb..my_userroles out userroles.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -c bcp tempdb..my_sysloginroles out sysloginroles.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_sysroles out sysroles.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_sysservers out sysservers.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_syssrvroles out syssrvroles.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_sysusers_1 out sysusers_1.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n bcp tempdb..my_sysusers_2 out sysusers_2.dat -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -n echo "Press <ENTER> to continue" ; read OK isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} <<EOF sp_configure "allow updates to system tables",1 go delete master..syslogins where suid > 2 go delete master..sysalternates go delete master..sysremotelogins go delete master..sysattributes where object_type in ("EL","UR") go delete master..sysloginroles where suid > 2 go delete master..sysroles where id >= 32 go delete master..sysservers where srvname != "SYB_BACKUP" and srvname not like "%_migrate" and srvclass != 0 -- local server go delete master..syssrvroles where srid >= 32 go delete master..sysusers from master..sysusers su where su.suid > 2 and not exists( select 1 from master..syslogins sl where sl.suid = su.suid) go delete master..sysusers from master..sysusers su, master..sysroles sr where su.uid = sr.lrid and sr.id >= 32 go if exists (select 1 from tempdb..sysobjects where name = "my_sysusers_2") drop table tempdb..my_sysusers_2 go create table tempdb..my_sysusers_2( suid int not null, uid int not null, gid int not null, name sysname not null, environ varchar(255) null) go EOF echo "Press <ENTER> to continue" ; read OK bcp master..syslogins in syslogins.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -c bcp master..sysalternates in sysalternates.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..sysremotelogins in sysremotelogins.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..sysattributes in remotelogins.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -c bcp master..sysattributes in userroles.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -c bcp master..sysloginroles in sysloginroles.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..sysroles in sysroles.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..sysservers in sysservers.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..syssrvroles in syssrvroles.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp master..sysusers in sysusers_1.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n bcp tempdb..my_sysusers_2 in sysusers_2.dat -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -n echo "Press <ENTER> to continue" ; read OK isql -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} <<EOF use tempdb go drop view my_syslogins, my_remotelogins, my_userroles, my_sysloginroles, my_sysroles, my_sysservers, my_syssrvroles, my_sysusers_1, my_sysusers_2 go EOF echo "Press <ENTER> to continue" ; read OK isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} <<EOF use master go declare @offset int if exists( select 1 from master..sysusers m, tempdb..my_sysusers_2 t where m.uid = t.uid) select @offset = (select max(uid) from master..sysusers) - (select min(uid) from tempdb..my_sysusers_2) + 1 else select @offset = 0 insert into master..sysusers select suid, uid + @offset, gid + @offset, name, environ from tempdb..my_sysusers_2 go drop table tempdb..my_sysusers_2 go sp_configure "allow updates to system tables",0 go EOF echo "Press <ENTER> to continue" ; read OK rm -f syslogins.dat sysalternates.dat sysremotelogins.dat remotelogins.dat userroles.dat sysloginroles.dat \ sysroles.dat sysservers.dat syssrvroles.dat sysusers_1.dat sysusers_2.dat isql -U${SOURCE_USER} -b -P"${SOURCE_PWD}" -S${SOURCE} <<EOF > /var/tmp/modifylogin set nocount on go select "exec sp_modifylogin '" + rtrim(suser_name(object)) + "','passwd expiration','" + convert(varchar(30),int_value) + "'" from master..sysattributes where object_type = "PS" and attribute = 0 and object_cinfo = "login" and class = 14 go select "exec sp_modifylogin '" + rtrim(suser_name(object)) + "','min passwd length','" + convert(varchar(30),int_value) + "'" from master..sysattributes where object_type = "PS" and attribute = 1 and object_cinfo = "login" and class = 14 go select "exec sp_modifylogin '" + rtrim(suser_name(object)) + "','max failed_logins','" + convert(varchar(30),int_value) + "'" from master..sysattributes where object_type = "PS" and object_cinfo = "login" and attribute = 2 and class = 14 go EOF echo "go" >> /var/tmp/modifylogin cat /var/tmp/modifylogin isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} < /var/tmp/modifylogin rm /var/tmp/modifylogin