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.
The script below will reverse-engineer the logins, passwords and roles on the existing 12.5 server and create a sql script. The sql script will then be applied at the 15.0.2 server.
#!/bin/sh if [ $# != 7 ] then echo "Usage: $0 <source> <source-login> <source-passwrd> <target> <target-login> <target-password> <interfaces file>" exit 1 fi SOURCE="$1" SOURCE_USER="$2" SOURCE_PWD="$3" TARGET="$4" TARGET_USER="$5" TARGET_PWD="$6" INTERFACES="$7" echo "** Testing connectivity to servers" isql -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -I ${INTERFACES} <<EOF > /tmp/$$.check EOF COUNT=`grep CT-LIBRARY /tmp/$$.check | wc -l` if [ ${COUNT} -gt 0 ] then cat /tmp/$$.check rm -f /tmp/$$.* echo "** Could not connect to Source server" exit 1 fi isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -I ${INTERFACES} <<EOF > /tmp/$$.check EOF COUNT=`grep CT-LIBRARY /tmp/$$.check | wc -l` if [ ${COUNT} -gt 0 ] then cat /tmp/$$.check rm -f /tmp/$$.* echo "** Could not connect to Target server" exit 1 fi rm -f /tmp/$$.check echo "** Connectivity ok" isql -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -I ${INTERFACES} -w800 -b <<EOF > logins.sql set nocount on go declare lees cursor for select suid,name,dbname,password,language,fullname from master..syslogins where suid > 2 order by suid go declare @suid int, @name varchar(30), @dbname varchar(30), @password varbinary(30), @language varchar(30), @fullname varchar(30), @value int open lees fetch lees into @suid, @name, @dbname, @password, @language, @fullname while @@sqlstatus = 0 begin print "exec sp_addlogin '%1!','migrate123',null,null,'%2!'", @name, @fullname print "update syslogins set suid = %1! where name = '%2!'", @suid, @name if @dbname != "master" print "update syslogins set dbname = '%1!' where name = '%2!'", @dbname, @name print "update syslogins set password = %1! where name = '%2!'", @password, @name if exists( select 1 from master..sysattributes where object = @suid and object_type = "PS" and attribute = 0 and object_cinfo = "login" and class = 14) begin select @value = int_value from master..sysattributes where object = @suid and object_type = "PS" and attribute = 0 and object_cinfo = "login" and class = 14 print "exec sp_modifylogin '%1!','passwd expiration','%2!'", @name, @value end if exists( select 1 from master..sysattributes where object = @suid and object_type = "PS" and attribute = 1 and object_cinfo = "login" and class = 14) begin select @value = int_value from master..sysattributes where object = @suid and object_type = "PS" and attribute = 1 and object_cinfo = "login" and class = 14 print "exec sp_modifylogin '%1!','min passwd length','%2!'", @name, @value end if exists( select 1 from master..sysattributes where object = @suid and object_type = "PS" and attribute = 2 and object_cinfo = "login" and class = 14) begin select @value = int_value from master..sysattributes where object = @suid and object_type = "PS" and attribute = 2 and object_cinfo = "login" and class = 14 print "exec sp_modifylogin '%1!','max failed_logins','%2!'", @name, @value end print "go" fetch lees into @suid, @name, @dbname, @password, @language, @fullname end close lees go deallocate cursor lees go select "exec sp_adduser '" + name + "'" from master..sysusers su where su.suid > 2 and exists( select 1 from master..syslogins sl where sl.suid = su.suid) go print "go" go EOF echo "** Script for logins created" isql -U${SOURCE_USER} -P"${SOURCE_PWD}" -S${SOURCE} -I ${INTERFACES} -w800 -b <<EOF > roles.sql set nocount on go declare lees cursor for select srid, name, password, status from master..syssrvroles where srid >= 32 go declare @srid int, @name varchar(30), @password varbinary(30), @status smallint, @value int open lees fetch lees into @srid, @name, @password, @status while @@sqlstatus = 0 begin print "create role %1!", @name if @password != null print "update syssrvroles set password = %1! where name = '%2!'", @password, @name if @status & 2 = 2 print "alter role %1! lock", @name if exists( select 1 from master..sysattributes where object = @srid and object_type = "PS" and attribute = 0 and object_cinfo = "role" and class = 14) begin select @value = int_value from master..sysattributes where object = @srid and object_type = "PS" and attribute = 0 and object_cinfo = "role" and class = 14 print "alter role %1! set passwd expiration %2!", @name, @value end print "go" fetch lees into @srid, @name, @password, @status end close lees go deallocate cursor lees go declare lees cursor for select suser_name(suid), role_name(srid), status from master..sysloginroles where suid > 2 go declare @suser_name varchar(30), @role_name varchar(30), @status smallint open lees fetch lees into @suser_name, @role_name, @status while @@sqlstatus = 0 begin print "grant role %1! to %2!", @role_name, @suser_name if @status = 1 print "exec sp_modifylogin '%1!','add default role','%2!'", @suser_name, @role_name print "go" fetch lees into @suser_name, @role_name, @status end close lees go deallocate cursor lees go select "grant role " + role_name(object_info1) + " to " + role_name(object) from sysattributes where object_type = "UR" and attribute = 2 and object_cinfo = null and class = 8 go print "go" go EOF echo "** Script for roles created" echo "Press <ENTER> to continue (delete values at target server)" ; read OK isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -I ${INTERFACES} <<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..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 EOF echo "Press <ENTER> to continue (apply generated sql at target server)" ; read OK isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -I ${INTERFACES} < logins.sql isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -I ${INTERFACES} < roles.sql isql -U${TARGET_USER} -P"${TARGET_PWD}" -S${TARGET} -I ${INTERFACES} <<EOF sp_configure "allow updates to system tables",0 go EOF rm -f logins.sql roles.sql echo "Migration script done."