segment mappings in sybase how to change it ????
I have created a stored proc that should generate the statements you
need to create the database properly. Create the proc and runn it; it
should give the correct create and alter statements for all yo
databases:
create proc dbo.pr_dbo_create_db_sql as
declare @db_name char(15)
declare @hold_name char(15)
declare @hold_log char(1)
declare @hold_alter char(1)
declare @dev_name char(10)
declare @frag_size char(8)
declare @seg_no char(4)
declare @frag_cnt int
declare @log_cnt int
declare @db_cnt int
declare @alter_cnt int
declare @seg_cnt int
declare @db_lstart int
declare @msg varchar(30)
select @hold_name = ' '
select @hold_alter = ' '
select @hold_log = ' '
select @frag_cnt = 0
select @log_cnt = 0
select @alter_cnt = 0
select @db_cnt = 0
create table tempdb..usages (db_db_name char(15), db_dev_name
char(10),
db_frag_size char(8), db_seg_no char(4))
declare user_tables cursor for
select convert(char(15),db_name(dbid)) ,
convert(char(10),d.name)
, convert(char(8), size/ 512), convert(char(4),segmap), lstart
from master..sysusages u, master..sysdevices d
where vstart/16777216 > 1 and vstart between low and high
and d.status <> 16
order by 1, lstart
open user_tables
fetch user_tables
into @db_name, @dev_name, @frag_size, @seg_no, @db_lstart
if (@@sqlstatus = 2)
begin
select @msg = 'no tables today'
print @msg
close user_tables
end
while (@@sqlstatus = 0)
begin
insert into tempdb..usages values(@db_name, @dev_name, @frag_size,
@seg_no)
fetch user_tables
into @db_name, @dev_name, @frag_size, @seg_no, @db_lstart
end
close user_tables
declare db_info cursor for
select * from
tempdb..usages
open db_info
fetch db_info
into @db_name, @dev_name, @frag_size, @seg_no
if (@@sqlstatus = 2)
begin
select @msg = 'no tables today'
print @msg
close user_tables
end
while (@@sqlstatus = 0) begin
if (@db_name != @hold_name and @db_cnt > 0)
begin
select @frag_cnt = 0
end
if @seg_no != '4' and @hold_log = 'Y'
begin
select @hold_log = 'N'
select @log_cnt = 0
end
if ((@seg_no != '3' and @seg_no < '8')
and @hold_alter = 'Y')
select @hold_alter = 'N'
if @db_name != @hold_name
and @db_cnt > 0
begin
select 'for load'
end
if @db_name != @hold_name
begin
select @alter_cnt = 0
select @log_cnt = 0
select @frag_cnt = 0
select @frag_cnt = @frag_cnt + 1
select @db_cnt = @db_cnt + 1
select @hold_name = @db_name
select @hold_alter = 'N'
select @hold_log = 'N'
select 'create database ' + @db_name , ' on '
, @dev_name + ' = ' + @frag_size
end
else
if (@db_name = @hold_name
and @frag_cnt > 0 and (@seg_no = '3' or @seg_no > '7')
and @hold_alter = 'N')
begin
select @frag_cnt = @frag_cnt + 1
select @alter_cnt = @alter_cnt + 1
select @hold_alter = 'Y'
select 'for load'
select 'alter database ' + @db_name , ' on '
, @dev_name + ' = ' + @frag_size
end
else
if (@db_name = @hold_name
and @frag_cnt > 1 and (@seg_no = '3' or @seg_no > '7')
and @hold_alter = 'Y')
begin
select @frag_cnt = @frag_cnt + 1
select @alter_cnt = @alter_cnt + 1
select ', '
, @dev_name + ' = ' + @frag_size
end
if (@db_name = @hold_name
and @frag_cnt > 0 and @seg_no = '4'
and @log_cnt = 0)
begin
select @frag_cnt = @frag_cnt + 1
select @log_cnt = @log_cnt + 1
select @hold_log = 'Y'
select 'log on '
, @dev_name + ' = ' + @frag_size
end
else
if (@db_name = @hold_name
and @frag_cnt > 0 and @seg_no = '4'
and @log_cnt >= 0
and @hold_log = 'Y')
begin
select @frag_cnt = @frag_cnt + 1
select @log_cnt = @log_cnt + 1
select @hold_alter = 'N'
select @hold_log = 'Y'
select ',', @dev_name + ' = ' + @frag_size
end
fetch db_info
into @db_name, @dev_name, @frag_size, @seg_no
end
close db_info
select 'for load'
drop table tempdb..usages
|