mysql密码和登录问题
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)解决办法:#修改数据库root用户口令# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysql -u root mysqlmysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';mysql> FLUSH PRIVILEGES;mysql> quit# /etc/init.d/mysqld restart# mysql -uroot -pEnter password:mysql> #使root用户可以远程登录GRANT ALL PRIVILEGES ON *.* TO
10g+ undo表空间使用率计算
如果使用dba_free_space去计算占用率会很高,就会一直告警。建议使用如下的方式去计算:select sum(bytes)/1024/1024 from dba_undo_extents where status='UNEXPIRED'select sum(bytes)/1024/1024 from dba_undo_extents这两个值计算出来相除就可以了。就是undo表空间的占用率。[@more@]
oracle 10g以后查询表空间使用率的快速方法
Select * from DBA_TABLESPACE_USAGE_METRICS;表空间名称 已用空间 表空间大小 使用百分比------------------------------ ---------- --------------- ------------INFOX_BACKUP_DATA 96 409600 0.0234375INFOX_BACKUP_INDEX 168 25600 0.65625INFOX_CONGESTION 352 128000 0.275INFOX_MAIN_DATA 56 102400 0.0546875INFOX_MAIN_INDEX 16 25600 0.0625INFOX_RESEND 440 128000 0.34375INFOX_TRAFFIC 344 128000 0.26875INFOX_WEB_MAIN_DATA 32376 102400 31.6171875INFOX_WEB_MAIN_INDEX 8 25600 0.03125INFOX_WEB_MAIN_LOG 2200 51200
a demo function of oracle for AKing
you'd better use an IDE to debug this function,such as plsql developer.and if any problems ,info me,i will answer you asap.tomorrow i will go to hongkong.---create demo data and insert into sample data.---according to your description,the a.a_value contains the valuelist,and in the table B,the B.b_id ---is corresponding to the a._value valueList.create table A(a_id number(10),a_value varchar2(200));create table B(b_id number(10),b_value varchar2(200));insert into A values(1,'11,22,33,44');insert
sybase终于支持SQL UDFs了
今天看到sybase发送的新闻。sybase 15.0.2版本终于支持SQL UDFs(用户自定义sql函数)了。 microsoft sql server/oracel早就支持了。sybase sql server一直不支持。有时候想对表里面的某个字段里的字符串做个替换,就要使用游标逐条处理,然后针对每行记录中的值使用一个存储过程来实现替换,很麻烦。 现在终于支持了。总是感觉sybase有点亦步亦趋的样子,总是跟在oracle后面并且很远。分区表也差不多类似的样子,不过实现的有点画虎不成反类猫的感觉,呵呵。 不过总是在进步嘛。[@more@]
mysql:集万千宠爱于一身
花了两天的时间看了一下mysql,下载了一个安装在xp下面。感觉只有一个:集万千宠爱于一身,可以从这里看到熟悉的oracle的风格,也可以看到sybase/ms sql server的风格。其实选择什么样的数据库应该不是问题了,问题是要选择一个合适的数据库。顺便花了几个小时看了一下mysql 的c api,还有perl开发,倍感亲切。草莽未必不是英豪,谁知道呢。[@more@]
数据库中两表之间相互更新的语法
表tableA 字段col1,col2,col3表tableB 字段col1,col2,col3两表之间对应的字段类型相同或者兼容,不需要转换。如果需要把tableA中col1和col2分别和表tableB中的col1,col2相同的列,使用tableB的col3来更新tableA的col3.sybase/sql server的语法update tableA set col3=b.col3from tableA a,tableB bwhere a.col1=b.col1 and a.col2=b.col2oracle的语法 update tableA a set col3=(select col3 from tableB b where b.col1=a.col1 and b.col2=a.col2)[@more@]
sybase截断半个汉字
由于导入或者字符集甚至其他原因,导致表中某些字段的值有半个汉字的情况出现。需要处理,所以写如下过程实现(具体的分析网文有,可以很方便的google到)。处理原理:就是按照一个字符串的char_length来分别截取每个字符,然后转换为varbinary,看第一个字节和第二个字节的取值,如果第一个字节的取值小于127,说明是字母或者数字,如果大于127,则看第二个字节,如果等于0则说明是半个字符。demo说明:我这个过程只是处理最后一个字符,因为我需要处理的情况就是末尾有半个汉字,如果是中间也有,就按照上述处理原理逐个处理,发现是半个
数据库之创建表前的判断处理
对于sybase/sql server就比较简单,可以使用if exists(select 1 from sysobjects where id=object_id("表的名称") and type="U") drop table "表的名称"go---然后创建即可。但是对于oracle就没有对应的语法。如果直接drop掉,则因为对应的对应没有存在,会提示错误信息,对于新手或者用服来说,发现错误的时候就会提出疑问。所以有如下简单的办法来处理。原理很简单,使用user_objects数据字典和动态sql语句。[@more@]create or replace procedure proc_dropifexists(p_i_tablename in varchar2 -----表
被颠覆的数据库常识
他们在组织oracle的培训,培训前先发了几个问题给要参加的人,让他们不参考资料的情况下回答一下,摸摸底.他们就拿过来给我看了一下,如下是问题.很多人的答案都应该差不多.实际上不是那么准确的.所以要颠覆一下认识吧.Q1:VARCHAR2和CHAR两种数据类型的区别?对于这个问题,绝大多数的资料和绝大多数的人都会这么回答:varchar2更节约空间.因为char(n)无论实际存了几个字符,占用的空间都是n个字符.varchar2不同.实际用了几个,然后再加一个指示长度.正确的答案:varchar2(n)和char(n)的区别如,varchar2(n) 当n<2000的时候,定义的是多少,无论实际
存储过程中拼接字符串
不同的数据库拼接字符串的时候有不同的语意. 对于oracle而言,只能用单引号,并且只能用||而不是用加号.如果用加号.oracle会默认把单引号中的字符串转化为数字,一旦转化不成功,就会提示ora-1702. 对于sybase而言,可以使用||或者+.如果是int或者numeric等非字符型的数据,需要使用convert或者cast强制转换. 存储过程中的这些特质,编码的时候看不出来,必须测试的时候才看得出来.记下来,以后不走弯路.[@more@]
sybase中字段缺省值查看以及修改
如果没有sybase central(或者由于字符集原因无法看到表的ddl语句的时候)或者rapid sql等工具的情况下可以使用isql或者sql advantage登录.sp_help table_name.看到某个字段的default_name对应为"表名_数字"select text from syscomments where id=数字(上述"表名_数字"中的数字.)如果不是所要的,可以使用alter table table_name replace 字段名 defualt defualt_value.即可.[@more@]
sybase把sa密码置空
sybase安装之后,sa默认的密码就是为空.可以使用sp_password 旧密码,新密码,用户名来修改.修改了之后要重新置空的话就有问题了.提示如下:密码长度小于6.不让修改.google了一下,找到了解决办法.[@more@]使用sa登录Server: isql -Usa -Psa_password -Sserver_name 记录当前版本号(以当前版本号12000为例): sp_configure "upgrade version" go 修改当前值为492: sp_configure "upgrade version",492 go 将某用户口令设置为NULL(以sa为例,当前口令为"1
sybase中cursor的使用中死循环问题解决
今天发现居然出了个死循环.奇怪呀.修改了一下while循环的条件.while @@sqlstatus=0 发现报了如下错误:582 : 0 : Number (582) Severity (16) State (3) Server (t10) Procedure (sms_clear_pre_sub) 游标'cur_pack_fail_b'被隐式地关闭,原因是当前游标位置由于更新或删除而被删除。游标扫描位置不能恢复。这发生在对一张以上的表引用的时候。 (24000)559 : 0 : Number (559) Severity (16) State (1) Server (t10) Procedure (sms_clear_pre_sub) 试图使用未打开的游标'cur_pack_fail_b'。使用系统存储过程sp_cursorinfo来得到更多信息。
oracle9i以后排重的好办法
表中排重的常规做法有:1 distinct 受限于表的数据量的大小和机器配置2 rowid 方法.delete from table where rowid in (select a.rowid from table a,table b where a.col1=b.col1 and a.col2=b.col2 ...and a.rowid<b.rowid)这个相对来说是效率比较高的.最近看书,发现9i及以后的分析函数,效率更高.使用如下的例子进行测试.sms_sys_param_test 表里面有260万,找出不重复的只用12s(机器10.40.95.105) sms_sys_param_test的数据里面不重复的是91条,来源于sms_sys_param. 采用 insert into sms_sys_param_test select * from sms_sys_param
oracle数据库cpu占用居高不下的解决办法
1、top 看到暂用cpu利用率较高的oracle或者相关进程。获取进程id 2、使用如下语句查询 select sql_text,spid,v$session.program,process from v$sqlarea,v$session,v$process where v$sqlarea.address=v$session.sql_address and v$sqlarea.hash_value=v$session.sql_hash_value and v$session.paddr=v$process.addr and v$process.spid in (PID); 将第一步查询到的pid输入上面的括号里面,用逗号分开。 3、就可以得到占用cpu比较多的语句。.....................................发现这个语句里面有bug(红色部分),以及需要优化 4、先查
sybase空间监控和死锁检测语句
一直习惯于oracle的空间查看使用数据字典,锁检测可以用到oem工具或者其他工具里面看session。sybase还不是很习惯。sybase提供了系统存储过程来看空间的使用,不过很难按照自己的要求定制,所以就去看对应系统存储过程的实现,然后查sybase的系统表参考,相对来说,还好,系统存储过程的实现没有加密,所以比较容易看明白。[@more@]对于空间监控,oracle提供了表,可以直接用。对sybase不熟悉,只能用sp_helpdb或者sp_spaceuesd类似的系统存储过程,考虑了一下,看系统表的参考吧。所以写出如下语句:use mastergoselect b.name,sum(a.siz
oracle job
经常会有一些定时任务需要对oracle数据库进行操作,这个处理常见的有两种办法:1、unix/linux的定时任务,写一个shell或者perl等程序2、job以前由于开发规范的要求,大多是按照第一种来写,实际上我觉得job更合适。因为如果oracle数据库服务器的操作系统是windows的话,按照第一种实现方式的话可能需要网络操作,如果网络中断,则定时任务无法处理。并且oracle可以对文件系统进行操作,可以通过包来写文件,所以job是一个能够完成绝大部分的操作。今天又用到了,就简单的记录了一下,以后可以参考。[@more@]variable job number;beginsys.
sqlplus安装help
;设置环境变量ORACLE_HOMESET ORACLE_HOME=D:/oracle/product/10.1.0/db_1;设置服务器SYSTEM登录账号信息SET SYSTEM_PASS=system/davidwang@oradavidwang;执行安装批处理文件%ORACLE_HOME%Bin/HelpIns.bat然后可以使用help了。如:[@more@]Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.C:Documents and Settingsdavid>sqlplusSQL*Plus: Release 10.1.0.2.0 - Production on 星期六 5月 20 07:13:00 2006Copyright (c) 1982, 2004, Oracle. All rights reserved.请输入用户名: system请输入口令:连接
oracle存储过程中的数组
之前遇到过一个老兄,问我是否会写存储过程,我自问也写过数百个存储过程,也对不少过程进行优化,尽管没有什么系统的理论知识,就回答说,比较熟,这老兄就问我有没有用过数组,说实话,用过,但是不太记得了,用的比较少,不是很熟,这个老兄说:写存储过程如果没有用过数组,就和没写过存储过程差不多。 虽然不赞同这老兄的说法,不过还是觉得应该研究一下的。这个老兄的意思是说,你可以把结果集放在一个结构数组中,这样子在内存里面访问起来比较快。我觉得应该是一样子的,因为都是在内存里面,即使是游标,因为存储过程都是在oracl