-
sybase切割字符串
日期:2012-05-23 | 分类:技术 |
够麻烦的
create procedure dbo.sp_string_split
@param_string varchar(100),
@split varchar(2)
as
declare @idx int
declare @split_length int
declare @last_string varchar(100)
declare @curr_string varchar(100)
begin
create table #split_str(str varchar(100) null)
set @last_string= @param_string
set @idx=CHARINDEX(@split,@last_string)
set @split_length = char_length(@split)
if(@idx>0)
begin
while(@idx>0)
begin
set @idx=CHARINDEX(@split,@last_string)
if(@idx>0)
begin
set @curr_string = substring(@last_string,1,@idx-@split_length )
set @last_string = substring(@last_string,@idx+@split_length ,100)
end
else begin
set @curr_string = @last_string
end
insert into #split_str(str) values(@curr_string)
end
end
else begin
insert into #split_str(str) values(@last_string)
end
--show data
select * from #split_str
end
test:
exec dbo.sp_string_split '123|333|888', '|'
-
linux下设置环境变量
日期:2012-02-01 | 分类:技术 |
平时设置个JAVA_HOME一般的做法是在~/.bashrc或者~/.bash_profile里面加上个export就好了。
加完之后source一下,然后按照网上大部分的说法回显一下就ok了:
echo $JAVA_HOME
今天遇到的情况是echo $JAVA_HOME 每次都有值,但是启动tomcat每次都报一副死相的报JAVA_HOME没设置,找了半天才发现系统里的环境变量被设置成这样了:
JAVA_HOME=/opt/java
但是没有export
这种情况下echo $JAVA_HOME 是有值的,- -!
所以保险的验证环境变量是否正确设置的办法应该是
export|grep JAVA_HOME
一下看看是否有值。
---EOF
-
sonar管理员密码重置
日期:2011-10-28 | 分类:技术 |
sonar管理员密码重置:
登陆:
mysql -u sonar –h localhost –p
改:
update users set crypted_password = '88c991e39bb88b94178123a849606905ebf440f5', salt='6522f3c5007ae910ad690bb1bdbf264a34884c6d' where login = 'admin'
-
在Solaris下使用非root用户配置crontab遇到的问题
日期:2011-10-18 | 分类:技术 |
1.没有权限
a)需要检查/etc/cron.d/cron.allow中是否配置了该用户,如果没有则加入
b)检查/etc/cron.d/cron.deny中是否配置了该用户,如果有则不能访问
2.报bad user
在/var/cron/log中看到如下报错:
> CMD: echo "Good morning." >> /opt/sybase/aaaa.txt
> sybase 4999 c Tue Oct 18 11:24:00 2011
! bad user (sybase) Tue Oct 18 11:24:00 2011
放狗看到这里说有可能是帐号被锁了需要改一下密码才行,
马上改密码试验,发现设定的任务运行正常了。
不过忘了看看是不是因为帐号被锁了。Locked account? ("*LK* in password field; or possibly it timed out)
记下备忘,下次遇到用 cat /etc/shadow看看是不是因为锁住了。
-
sybase用proc迁移大数据量到备份表备忘
日期:2011-04-01 | 分类:技术 |
悲摧的4.1太惊喜了
,N久以前某位同志埋下的雷居然在节日爆了出来...居然在一张有1亿多数据的表里做了一个全表扫描的select.于是tmpdb被撑爆,数据库无法响应正常的请求.借助万能的google和sybase同志的支持,俺这只菜鸟只能硬着头皮上了.
基本思路,把一定范围内的数据insert到备份表,删除原来的数据,直到没有符合查询范围的数据为止.
修改了一下存储过程后暂时解决问题了,测试了800w数据迁移没有问题
--sybase用proc迁移大数据量到备份表操作
create procedure INSERT_AND_DELETE
@insert_sql varchar(5000),
@delete_sql varchar(5000),
@row_count int
as
begin
declare @rc varchar(19)
select @rc=convert(varchar,@row_count)
print @insert_sql
print @delete_sql
print @rc
set rowcount @row_count
begin tran
exec(@insert_sql)
exec(@delete_sql)
while ( @@rowcount !=0 )
begin
commit tran
begin tran
exec(@insert_sql)
exec(@delete_sql)
end
commit tran
set rowcount 0
end
go
create procedure MOVE_TO_HISTORYasbeginexec INSERT_AND_DELETE"insert into A_BACKUP(ID,START_TIME) select RECORDID,START_TIME from A where TIME < dateadd(dy,-183,getdate())","delete from A where START_TIME < dateadd(dy,-183,getdate()) ",5000exec INSERT_AND_DELETE"insert into B_BACKUP(ID,START_TIME) select RECORDID,START_TIME from B where TIME < dateadd(dy,-183,getdate())","delete from B where START_TIME < dateadd(dy,-183,getdate()) ",5000endgo因为insert into 。。。select 会占用logsegment,运行时需要观察sp_helpsegment 'logsegment'很土的造数据办法,直接在isql里执行,出入100w条数据:declare @count intset @count = 1000000while(@count>0)beginbegin traninsert into A( START_TIME , END_TIME ) values ('2010-12-01','2010-12-03')insert into A( START_TIME , END_TIME ) values ('2010-12-01','2010-12-03')commit tranend--------------------------------------------------------------------------导出数据:bcp A out /opt/sybase/xx/A.out -c -t'~!#' -r'^$*' -U username -P passwd -S SYBASE_VS33导入数据:bcp A in /opt/sybase/xx/A.out -Y -c -t'~!#' -r'^$*' -U username -P passwd -S SYBASE_VS---------------------------------------------------------------------------直接从系统表查询数据记录数:select row_count(db_id('dbname'),object_id('A'))效果等同于select count(*) from A但是速度快很多







