随笔分类 - DataBase
mysql性能调优
摘要:查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段...
阅读全文
摘要:由于安装的时候没有计划好空间,默认装在系统盘,而且又没有做自动备份、截断事务日志等,很快LDF文件就达到十几G,或者几十G ,此时就不得不处理了。备份和计划就不说了,现在就说下怎么把它先删除吧:1:先分离数据库2:为了保险,先不要删除,把LDF文件重命名下3:附件数据库。4:OK。以上可能遇到的问题...
阅读全文
摘要:还原SQLSERVER数据库,原来的数据库的于当前SQLSERVER同名用户就不能再登录了,原因是当前SQLSERVERD的master数据库的sysxlogins表的的sid与还原后的数据库的sysusers表里的sid不一致造成的,直接 update还原后的数据库的sysusers表默认是不被SQLSERVER允许的. 但是可以使用 sp_change_users_login 存储过程来同步用户sid,这样以前数据库的用户也就可以登录.例如,我还原后的数据库是 demo ,原来的数据库用户: demouse dbselect SID from sysusers where name =&#
阅读全文
摘要:Oracle数据文件收缩实例数据文件的作用HWM的基本概念查看数据文件的使用情况包括内容:数据文件大小,已经used空间,free空间,hwm信息select/*+ ordered use_hash(a,b,c) */ a.file_id,a.file_name,a.filesize, b.freesize, (a.filesize-b.freesize) usedsize, c.hwmsize, c.hwmsize - (a.filesize-b.freesize) unsedsize_belowhwm, a.filesize - c.hwmsize canshrinksize from (
阅读全文
摘要:关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin for temp in var_c loop if temp.course_name = 'OS' then dbms_output.put_line('Stu_name = '||temp.stu_name); elsif temp.course_name = 'DB' then dbms_output.put_line('DB')
阅读全文
摘要:复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR2, P_RECEIVER VARCHAR2, P_SERVER VARCHAR2, P_PORT NUMBER DEFAULT 25, P_NEED_SMTP INT DEFAULT 0, P_USER VARCHAR2 DEFAULT NULL, P_PASS VARCHAR2 DEFAULT NULL, P_FILENAME VARCHAR2 DEFAULT NULL, P_ENCODE V
阅读全文
摘要:新建Oracle数据库三种方法:1.通过运行Oracle Database Configuration Assistant 创建配置或删除数据库(也可在命令行下输入dbca);2.用命令行的方式建立数据库3.通过运行自定义的批处理脚本(或create_ORACLE_SID.bat(create_ORACLE_SID.sql))来创建配置或删除数据库详述:1.通过运行Oracle Database Configuration Assistant 创建配置或删除数据库;建议不熟悉创建过程的DBA使用该方法,只需要根据选项%26#8220;下一步%26#8221;进行配置,最后生成数据库的创建脚本(
阅读全文
摘要:触发器,函数,包都是可以再生利用的东西,所以在创建的时候都要用到create or replace这个万能语句,接着就是主角trigger的出现了,主角出现还需要一点点波动,通常大人物都不是随随便便就显现的,所以要配上before [after] insert[update/delete] on tableName.create or replace trigger is tri_update[/insert/delete/UID]_tableName before[after] insert[update/delete/or 。。。] on tableN...
阅读全文
摘要:一,Oracle中的过程,函数对于oracle中的过程和函数,个人觉得可以化为一类,因为它们在写法上并没有什么的不同。公式无非就是create or replace Package_name(paramater1 in type,paramater2 in type,out_message out type) is locate_paramater1 type; locate_paramater2 type; begin begin select sth into locate_paramater1 from table_name where 。。。。 ex...
阅读全文
摘要:-- 声明游标;CURSOR cursor_name IS select_statement--For 循环游标--(1)定义游标--(2)定义游标变量--(3)使用for循环来使用这个游标declare --类型定义 cursor c_job is select empno,ename,job,sal from emp where job='MANAGER'; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_job%rowt...
阅读全文
摘要:为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。Oracle 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。管道化表函数必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,
阅读全文
摘要:假设我有一个过程P1(V1 IN VARCHAR2),另一有一个过程EX(P IN VARCHAR2,P IN VARCHAR2),第一个参数是过程名,第二个参数是指定过程的参数,我执行EX('P1','AAAA')想在EX里执行传进的第一个参数指定的过程名,并把第二个参数做为这个过程的参数传进去。暂时找到个方法:EXECUTE IMMEDIATE 'begin ' || p1 || '(''' || v1 || '''); end;';
阅读全文
摘要:oracle存储过程单步调试的方法 1.在要调试的过程上单击test,如下图所示: 2.出现如下界面时单击最左上方的按钮:,如下图所示: 3.单击后呈现如下画面: 其中: 表示要停止test; 表示要全部运行完这个过程。单击它后你就不能单步调试了。 单步调试。单击它后可以像在exlipse或者visal stidio里面一样对程序进行单步调试了。 4.单击“单步调试”按钮。出现如下画面: 这个时候表示你进入了调试状态,你可以单击上面说的任何按钮来控制程序,如下: 表示要停止test,不再调试了; 表示要全部运行完这个过程,不再进行单步调试了。 单步调试,表示要一步一步的调...
阅读全文
摘要:这几天需要用到数据库,使用的是MySQL,数据库管理软件使用的是phpMyAdmin,要创建一个存储过程,就需要执行一个SQL语句,语句如下,结果报错了,报错如下:“#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 ”后来上网查,才发现原来是个经典错误,现在记录如下,免得以后再遇到:解决方法: 首先确定不是SQL语句的问题
阅读全文
摘要:1.mysql的远程连接命令可以远程导入导出数据 mysqldump --default-character-set=gb2312 -h255.255.000.00 -uroot -pxxxxxx mydatabase>d:\data.sql 将指定的数据库导出到一个外部SQL文件中去! 还原命令: mysql --default-character-set=gb2312 -h255.255.000.00 -uroot -pxxxxxx mydatabase<d:\data.sql 2. MYSQL三种升级方法 安装办法:二进制包编译安装 第一种:适用于任何一种存储引擎。 1. 下
阅读全文
摘要:MySQL 数据库性能优化之缓存参数优化 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化。query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 R...
阅读全文
摘要:前言在安装完MySQL之后,肯定是需要对MySQL的各种参数选项进行一些优化调整的。虽然MySQL系统的伸缩性很强,既可以在有很充足的硬件资源环境下高效的运行,也可以在极少资源环境下很好的运行,但不管怎样,尽可能充足的硬件资源对MySQL的性能提升总是有帮助的。在这一节我们主要分析一下MySQL的日志(主要是Binlog)对系统性能的影响,并根据日志的相关特性得出相应的优化思路。日志产生的性能影响由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源。在之前介绍MySQL物理架构的章节中,我们已经了解到了MySQL的日志包括错误日志(ErrorLog),更新日志(UpdateLog
阅读全文
摘要:优化Group By语句默认情况下,MySQL 排序所有GROUP BY col1,col2,....。查询的方法如同在查询中指定ORDER BY col1,col2,...。如果显式包括一个包含相同的列的ORDER BY子句,MySQL 可以毫不减速地对它进行优化,尽管仍然进行排序。如果查询包括GROUP BY 但你想要避免排序结果的消耗,你可以指定ORDER BY NULL禁止排序。优化Order by语句在某些情况中,MySQL 可以使用一个索引来满足ORDER BY 子句,而不需要额外的排序。where 条件和order by 使用相同的索引,并且order by 的顺序和索引顺序相同
阅读全文
摘要:在本章第一节中我们还提到过通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法。要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 MySQL 5.1正式版中已经可以非常容易做到了,那就是通过 Query Profiler 功能。MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具,通过该工具可以获取一条Query 在整个执行过程中
阅读全文
摘要:前言在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。线程栈信息使用内存(thread_stack)主要用来存放每一个线程自身的标识信息,如线程id,线程运行时基本信息等等,我们可以通过 thread_stack 参数来设置为每一个线程栈分配多大的内存。排序使用内存(sort_buffer_size)MySQL 用此内存区域进行排序操作(filesort),完成客户端的排序请求。当我们设置的排序区缓存大小无法满足排序实际所需内存的时候,MySQL 会将数据写入磁
阅读全文