修改操作系统用户密码,造成SQL Server服务启动失败

修改操作系统密码,导致SQL不能启动的解决办法:
方法一. 我的电脑–控制面板–管理工具–服务–右键   MSSQLSERVER–属性–登陆–登陆身份–选择"本地系统帐户"


或:
方法二. 我的电脑–控制面板–管理工具–服务–右键   MSSQLSERVER–属性–登陆–登陆身份–选择"此帐户"–密码和确认密码中输入你修改后的administrator密码.

两者的区别:
选择第一种方式,以后修改了administrator密码,不用再调整(但要求登陆操作系统的是系统管理员)
选择第二种方式,以后修改了administrator密码,还要再重复做上面的操作.

access转sql server

access转sql server时,一般在access里面有autonumber的字段,比方说id,自动增加的字段,转成sql server后,一定要把相应的字段按照如下设置。

SQL SERVER的数据类型

    数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型:
  ·Binary [(n)]
  ·Varbinary [(n)]
  ·Char [(n)]
  ·Varchar[(n)]
  ·Nchar[(n)]
  ·Nvarchar[(n)]
  ·Datetime
  ·Smalldatetime
  ·Decimal[(p[,s])]
  ·Numeric[(p[,s])]
  ·Float[(n)]
  ·Real
  ·Int
  ·Smallint
  ·Tinyint
  ·Money
  ·Smallmoney
  ·Bit
  ·Cursor
  ·Sysname
  ·Timestamp
  ·Uniqueidentifier
  ·Text
  ·Image
  ·Ntext

(1)二进制数据类型

  二进制数据包括 Binary、Varbinary 和 Image
  Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。
  Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。
  Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
  在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。

(2)字符数据类型

  字符数据的类型包括 Char,Varchar 和 Text
  字符数据是由任何字母、符号和数字任意组合而成的数据。
  Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。

(3)Unicode 数据类型

  Unicode 数据类型包括 Nchar,Nvarchar 和Ntext
  在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。
  在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。

(4)日期和时间数据类型

  日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型
  日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。
  日期的格式可以设定。设置日期格式的命令如下:
  Set DateFormat {format | @format _var|
  其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
  例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式

(5)数字数据类型

  数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数
  整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是    Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。
  精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
  在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。

(6)货币数据表示正的或者负的货币数量 。

  在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney

  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。

(7)特殊数据类型

  特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即    Timestamp、Bit 和 Uniqueidentifier
  Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。
  Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。
  Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。

2.用户定义的数据类型

  用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。
  当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。

(1)创建用户定义的数据类型

  创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:
  sp_addtype {type},[,system_data_bype][,’null_type’]
  其中,t
ype 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。
  例子:
  Use cust
  Exec sp_addtype ssn,’Varchar(11)’,"Not Null’
  创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。
  例子:
  Use cust
  Exec sp_addtype birthday,datetime,’Null’
  创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。
  例子:
  Use master
  Exec sp_addtype telephone,’varchar(24),’Not Null’
  Eexc sp_addtype fax,’varchar(24)’,’Null’
  创建两个数据类型,即 telephone 和 fax

(2)删除用户定义的数据类型

  当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {‘type’}。
  例子:
  Use master
  Exec sp_droptype ‘ssn’
  注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。

SQL SERVER的字段类型说明

  以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。

字段类型 描述
 bit  0或1的整型数字
 int  从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
 smallint  从-2^15(-32,768)到2^15(32,767)的整型数字
 tinyint  从0到255的整型数字
   
 decimal  从-10^38到10^38-1的定精度与有效位数的数字
 numeric  decimal的同义词
   
 money  从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
 smallmoney  从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
   
 float  从-1.79E+308到1.79E+308可变精度的数字
 real  从-3.04E+38到3.04E+38可变精度的数字
   
 datetime  从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
 smalldatetime  从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
   
 timestamp  时间戳,一个数据库宽度的唯一数字
 uniqueidentifier  全球唯一标识符GUID
   
 char  定长非Unicode的字符型数据,最大长度为8000
 varchar  变长非Unicode的字符型数据,最大长度为8000
 text  变长非Unicode的字符型数据,最大长度为2^31-1(2G)
   
 nchar  定长Unicode的字符型数据,最大长度为8000
 nvarchar  变长Unicode的字符型数据,最大长度为8000
 ntext  变长Unicode的字符型数据,最大长度为2^31-1(2G)
   
 binary  定长二进制数据,最大长度为8000
 varbinary  变长二进制数据,最大长度为8000
 image  变长二进制数据,最大长度为2^31-1(2G)

DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的*作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统 R“的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意
,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。

一、资料定义 DDL(Data Definition Language)
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。

1、建表格:
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
…)
说明: 
DATATYPE –是资料的格式,详见表。
NUT NULL –可不可以允许资料有空的(尚未有资料填入)。
PRIMARY KEY –是本表的主键。

2、更改表格 
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法)。 
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明:把主键的定义删除。

3、建立索引 
CREATE INDEX index_name ON table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。

4、删除 
DROP table_name
DROP index_name

二、的资料形态 DATATYPEs
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为
了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。

组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的
表格才能够得到结果的。
SELECT *
FROM table1,table2
WHERE table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。

整合性的查询:
SELECT COUNT (*)
FROM table_name
WHERE column_name = xxx
说明:
查询符合条件的资料共有几笔。
SELECT SUM(column1)
FROM table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。
SELECT column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > xxx
说明:
1.GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字
一起使用。
2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。

复合性的查询
SELECT *
FROM table_name1
WHERE EXISTS (
SELECT *
FROM table_name2
WHERE conditions )
说明:
1.WHERE 的 conditions 可以是另外一个的 query。
2.EXISTS 在此是指存在与否。
SELECT *
FROM table_name1
WHERE column1 IN (
SELECT column1
FROM table_name2
WHERE conditions )
说明: 
1. IN 後面接的是一个集合,表示column1 存在集合里面。
2. SELECT 出来的资料形态必须符合 column1。

其他查询
SELECT *
FROM table_name1
WHERE column1 LIKE ’x%’
说明:LIKE 必须和後面的’x%’ 相呼应表示以 x为开头的字串。
SELECT *
FROM table_name1
WHERE column1 IN (’xxx’,’yyy’,..)
说明:IN 後面接的是一个集合,表示column1 存在集合里面。
SELECT *
FROM table_name1
WHERE column1 BETWEEN xx AND yy
说明:BETWEEN 表示 column1 的值介於 xx 和 yy 之间。

3、更改资料:
UPDATE table_name
SET column1=’xxx’
WHERE conditoins
说明:
1.更改某个栏位设定其值为’xxx’。
2.conditions 是所要符合的条件、若没有 WHERE 则整个 table 的那个栏位都会全部被更改。

4、删除资料:
DELETE FROM table_name
WHERE conditions
说明:删除符合条件的资料。

说明:关于WHERE条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是ACCESS数据库,则为:WHERE mydate>#2000-01-01#
(2)如果是ORACLE数据库,则为:WHERE mydate>cast(’2000-01-01’ as date)
或:WHERE mydate>to_date(’2000-01-01’,’yyyy-mm-dd’)
在Delphi中写成:
thedate=’2000-01-01’;
query1.SQL.add(’select * from abc where mydate>cast(’+’’’’+thedate+’’’’+’ as date)’);

如果比较日期时间型,则为:
WHERE mydatetime>to_date(’2000-01-01 10:00:01’,’yyyy-mm-dd hh24:mi:ss’)

dba麻烦终结者之路

本文转载自ITPUB

或许你厌倦了朝五晚六的开发工作,开始考ocp;或许你刚走出象牙塔,立志在数据库管理方面大干一场?经过一翻努力,终于有了份dba的工作,忐忑不安地坐在电脑旁,激动得手心冒汗,却不知如何去调整、优化数据库;面对突如其来的故障,电话响个不停,老板虎视耽耽地站在身旁,不知你些时是否能静下心来?

       可能读了许多数据库管理、调优、备份与恢复、pl/sql开发方面的书,也可能做了很多故障排除的实验,可当故障真正降临时,却显得那么可怕,通常正在运转的生产数据库一直处于性能恶化趋势,麻烦总是从你意想不到的地方出现,阿门。

数据库系统本身永远是的值得注意的麻烦制造者:数不清的bug、对象失效、磁片碎片、索引重建以及很多没有顾及到的突发事件等;没有sql经验的程序员也是很历害的麻烦制造者:编写性能不佳的sql以及创建一些性能较差的存储对象;最可怕的麻烦制造者是谁呢?吼吼,正是来源于dba本身,对数据库一个微小的修改,或许就导致一场灾难。

做为一个新手dba来讲,有关oracle体系统结构的概念非常重要,如果想比较透彻地理解这些概念,必须做大量的实验,书上得来终觉少,绝知些事要躬行,呵呵,千万不要在生产库上进行哦;如果想从麻烦制造者成长为一个麻烦终结者,只顾自己埋头苦学是不够的,毕竟你的生产环境与学习环境产生的故障很有限,通过在相关论坛上阅读贴子,从网友的经验与教训中汲取营养,拓展发现与解决问题的技巧。

独立学习与思考是dba快速成长的关键。许多新手发现系统出现问题或未知的现象,第一时间总是去咨询资深dba,其实这是坏习惯,尽量对问题进行分析与推理,如果实在没有头绪的话,可以在google或相关的论坛上发贴求助,网络上总会有许多意相不到的惊喜,相信90%的问题已经有了答案,关键是如何找到它。

不要对internal的东西费心费神,打好基础才是主要的,要有一定的pl/sql编程技术,牢牢掌握数据库备份与恢复,然后提高系统调优及SQL优化的能力,当技术累积到一定的层次时,对于许多internal的东西自然自然就领会啦。

良好的沟通能力有助于更快地解决问题。很多时间,可能已经解决了问题,却不知为什么会产生这种问题,这时可以咨询一下项目负责人或相关程序员,尽量把问题的根源搞清楚,如果问题没能根本解决,问题必然卷土重来。

作为dba,需要为项目组的程序员提供统一的《数据库开发规范》,如果可能,也可做为程序员做sql编写及sql优化技巧方面的培训,尽量让性能不佳的sql胎死腹中,新手dba,更要融入项目组,理解业务系统的需求,并掌握一定的数据库建模知识,通过对数据库结构的掌握,为数据库结构优化与sql优化打下基础。

努力学习对dba是必不可少的,需要注意的是:并不是方方面面的知识都需要熟记硬背。有选择地去深入研究某个方面的技能,才能突破泛泛之境;不要太在意研究配置dataguard、安装rac等琐事,雕虫小技而已;(http://www.cnoug.org/viewthread.php?tid=2226)这是piner网友收集整理的oracle faq,相信无论新手熟手,都是可以翻翻的。

“工欲善其事,必先利其器”,做为dba来讲,必须为自己及程序员搭建顺手的工作环境(本文以linux平台为例)。在linux平台上,sqlplus是不具有回调功能的,如何搭建具有回调环境的sqlplus呢?(http://www.dbanotes.net/Oracle/uniread-howto.htm)大家可以参考fenng网友的贴子。还有就是安装sqlplushelpsql语法的help,具体方法大家可以参考下面这个贴子(http://www.cnoug.org/viewthread.php?tid=1710)。在9i以后的版本中sqlplushelp默认是安装的,sql语法的help就必须自己安装啦。

 

最需要新手注意的网址:http://tahiti.oracle.com  http://metalink.oracle.com

关于操作系统/网络参数的调整

做为dba,对linux/unix应该有相当的基础。理解raidrawlvmocfsasm等与存储相关的概念;能够安装oracle软件及打补丁;理解linux/unix常用的命令rpmcpiotarftptopvmstatiostatsarnetstatcrontab等;应用服务器的调整有一定的了解;关于linux/unix的问题,可以到http://www.chinaunix.com http://www.puschitz.com/去寻找答案。

关于初始化参数(sga)的调整

深刻理解oracle的初始化参数是dba必不可少的功课,却不能把调整参数做为提高性能的救命稻草,不合适的参数必将带来性能上的下降,甚至数据丢失的危险;不要以为使用隐藏参数为荣,做事要有未雨调缪的打算,在系统故障时可以坦然对之。

没有任何工式可以满足sga调整的需要,通常都是经过多次调整,才能达到比较合谐的效果,

http://blog.csdn.net/biti_rainy

这个贴子是biti_rainy关于sga调整的总结,基本可以适合大多数情况。

32bit的操作系统中,sga1.7g的限制,如果相在32bit的操作系统上突破1.7g的限制,就需要使用特殊的手段,

http://www.itpub.net/showthread.php?s=&threadid=124424)这个贴子是coolyl网友针对各个平台sga突破1.7g的限制的总结。

64bit的操作系统中,sga不需要特殊方法可以上到3.9g,如果想突破4g的话,方法与32bit系统中突破1.7g的方法类似,也就是说必须使参数use_indirect_data_buffers=true,然后使用db_block_buffers来设置buffer cache的大小。

关于statspack的若干建议

不要对statspack报太大希望,它只能告诉你过去某段时间数据库的运行状态,以及预测将来一段时间的性能趋势(初始化参数没能重大调整及业务没能巨剧变化的情况下),通过statspack的报表,dba可以对初始化参数进一步进行微调。

statspack可以告诉你性能瓶颈所在,仅此而已,引起性能瓶颈的根本原因必须dba亲自动手查;当然引起性能瓶颈的原因也可能已经收集到啦,在众多收集到的sql中需要仔细斟别哦,如果sql语句太长,就比较麻烦,因为在statspack中,过长的sql会被截断的;无论如何,statspack都是dba不可却少的助手,(http://www.eygle.com/more/statspack_list.htm)这是eygle网友关于statspack的系列研究贴子,希望对你有用。

如果你需要经常制做statspack的性能趋势报表,一般可以用excel来做,就是麻烦了一些,偶写了一款专门制做statspack报表的工具,不仅可以更快更方便地制作出漂亮的报表,而且可以对知识进行管理。(http://www.cnoug.org/viewthread.php?tid=20115

关于logmnr在调优中的运用

一直以来,logmnr都不是调优所推荐的工具,主要用于安全审计方面,其实在追究系统瓶颈上logmnr可是得天独厚,通过对日志的审查(需要dba有足够的耐心哦),可以更清楚地知道oracle在某段时间内做了什么,这样做是不是合理?当然logmnr并不能告诉你什么合理,你必须自己判断。

b/s结构的应用中,在session连接时用dbms_application_info.set_client_info设置sessionclient_info,这样在用logmnr进行日志挖掘时,就知道是那个页面执行了这个操作,范围就比较小;在c/s结构的应用中,那是通常每个client连接后,都可能需要很久才断开session,客户每打开某个业务模块,最好用dbms_application_info.set_client_info设置该sessionclient_info信息。

关于materialized view在调优中的运用

olap环境中,mview是以空间换时间的一种有效手段,更少的物理读/写,更少的cpu时间,更快的响应速度,所以它不适合高端的oltp环境;在oltp环境中,规模较大的报表适合使用mview来提高查询性能。(http://www.itpub.net/224536.html)这个贴子可以下载到《expert one on one oracle》中文扫描版,该书的第13章专门讲述mview的运用。

关于stored outlinessql优化中的运用

stored outlines是为了维持sql执行计划稳定性而推出的功能,主要适用于测试环境到产品数据库环境的迁移、当搜集统计信息以采样方式运行、搜集统计信息可能给某些特定SQL带来危害、无法对源代码进行修改等情况下,为了保证产品数据库的良好运行,我们需要稳定执行计划。人为的调整某些特定的sql,我们可以使用sql谨慎的确定某个sql所需要的outlines。(摘自biti_rainy原话,原url如下。)

单击此处的url将不能打开相关链接拷贝到ie地址栏中即可)关于stored outlines的使用,

http://blog.itpub.net/post/96/1548 也可以参考本人拙作。曾对stored outlines抱有厚望,但在实际运用中却发现outlines并不是那么很好伺候,一般当sql使用bind variable的情况下用outlines来稳定计划会更合适一些。

当初始化参数cursor_sharing=EXACT时,如果查询条件不同,就没有办法使用stored

outlined;如果把业务逻辑封装在stored procedure中,procedure中的变量将以bind variable的形式出现,这时可以用stored outlines来稳定执行计划,具体操作见本人拙作;如果sql中没有文本变量(常数),则可以用stored outlines

   如何用dbms_profiler测试stored procedure

    关于dbms_profiler package主要用于pl/sql blockstored procedure的性能测试,在开发阶段程序员或dba需要对开发的各种存储对象进行性能测试,通过dbms_profiler package可以找出存储对象中性能不佳的地方,然后进行改行;可以看出dbms_profileoutline的区别是:一个用于开发阶段,需要修改程序,一个用于正式运行阶段,不必去修改程序,只改变sql的执行计划而已。关于dbms_profiler package的两个贴子:

    http://www.samoratech.com/PLSQLProfiler.htm

    http://pages.videotron.com/orautils/pages/dbms_profile.htm

   如何对sql进行调整及优化

    优化sql是最能体现dba智慧与价值的地方。通常在statspacktop 5wati event主要由性能不佳的sql引起的;磁盘排序及temp tablespace瀑涨等大多与sql有关,不排除创建与重建索引这方面,但这方面的原因应该是dba负责,大表在创建或重建索引必须在系统空闲时。

性能不佳的sql是如何产生的呢?这里面问题就比较复杂一些:不良的数据库结构必将导致不良的sql;还有就是程序员的sql编写技能引起的;不要奢望程序员是sql编写方面的专家,根据偶自己做开发的经历,最快时间完成项目才是最重要的,所以程序员不会太关心sql的性能,即是关心,也是很有限的。

对程序员进行合适的关于sql优化的培训,提高他们的责任感,针对系统中出现的案例进行讲解,程序员潜意识中就会努力避免很多低级的错误;要多与程序员交流,尽量引导程序员描述他在数据库方面感到困难的地方,并提出指导性意见及解决方案。

对新手dba而言,通常都很有兴趣对系统参数或sql进行调优,却不知如何动手。在系统参数方面本身要有一定的理解,也可以请教与资深dba进行探讨,性能提高上奉劝不要抱太大的希望,也可以根据statspack的报表进行分析,对系统参数进行微调;在sql调优方面,必须能够勘别出性能不佳的sql

如何勘别出性能不佳的sql呢?通常要综合以下性能指标(response time/consistent gets/physical reads)进行判断;要根据自己的情况从v$sqlv$sqltext_new_withlines字典表中把符合条件的sql查询出来:

set lines 99

col sql_text format a81

col bgets_per format 99999999.9

set long 99999999999

set pagesize 9999

select address,hash_value,disk_reads,elapsed_time/1000000 as

"elapsd_time(s)",cpu_time/1000000 as "cpu_time(s)",

       buffer_gets/executions bgets_per,first_load_time,sql_text

 from v$sql

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 50000);

    上面的这个查询主要将physical reads > 1000consistent gets > 50000sql语句找了出来,当然你也可以将响应时间也进行限制,通常onsistent gets较大或physical reads较大的sql,它的response time也必然会比较大。

    如何在sql执行时产生执行计划呢?在sqlplus上输入set autot on就可以产生比较详细的执行计划;set autot off是让sqlplus取消产生执行计划;set autot traceonly只显示sql影响的行数、执行计划、执行的统计信息、不输出结果集;set autot on exp输出执行后的结果集及执行计划;set autot on stat输出执行后的结果集及统计信息。explain plan只对sql进行分析,产生执行树,用select * from table(dbms_xplan.display)输出explain plan产生执行计划。

set autot[race] {off|on|trace[only]}[exp[lain]] [stat[istics]]

explain plan [set statement_id = &item_id] for &sql;  

select * from table(dbms_xplan.display);

    如何对性能不佳的sql进行优化,想来对任何一个dba都有挑战性。在这个环节上,dba必须掌握如何查看sql的执行计划,并对返回的结果有一定的了解;如果是新手,可以借助一些sql优化工具进行调优,可借用的工具有lecco sql expertquest toad,鉴与新手对工具的理解有些难度,本人为lecco sql expert写了中文图解。

    sql expert 教程 http://www.cnoug.org/viewthread.php?tid=22327

    quest toad 教程 http://www.cnoug.org/viewthread.php?tid=3242(向原作者致谢)

    任何工具都是比较低智能的,如果你觉得leccotoad比较顺手,千万勿沉溺其中,它们只是一个拐杖而已,你必须超越它,否则你的价值就值得怀疑;针对sql的优化,必须自己多动手测试,而且也要阅览众书,从别人的经验中激发灵感。

    在优化sql时,需要一层层地对sql进行分析。首先对sql的语法进行分析,剔除冗余的或错误的查询条件(有可能是程序员手误),花得工夫不是很多,性能可得到极大的提高,不要太相信程序员,他们写得必未正确;其次对sql涉及表的结构进行分析,特别是复杂的sql,要检查是否有更佳的连接路线,连接字段是否有索引,索引的选择性如何等;第三偿试用不同的hints改变表的的驱动次序。http://www.adp-gmbh.ch/ora/sql/hints.html 这个贴子是oracle hints的一个列表,hints具体用法可查http://tahiti.oracle.com

    关于sql调优的细节很多,不可能一一列举,具体环境必须以执行计划为准,通过对sql的理解,提升到对数据库结构的合理性进行揣测,合理的数据库结构,将对sql的性能有较大的提高;有些情况下,修改了数据库结构,并不需要在程序上进行相应的改动,比如将大表进行分区、创建mview等。关于sql优化大家也可以好好研究一下网友black_snail的系列贴子,有详细的示例:http://www.dbonline.cn

   如何对session进行跟踪及tkprof的使用

    跟踪session的活动,oracle提供了很多种手段,不仅可以对当前连接的session进行跟踪,也可以对其它用户的session进行跟踪;通过对trace文件的分析,不仅可以掌握该session的活动也可以找出这个session中的瓶颈所在session的跟踪是dba进行系统调优、故障诊断的常用方法。

    alter session set sql_trace=true/false

    对当前会话的活动进行跟踪及停止跟踪

exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);

    可以对当前session、其它用户的session进行跟踪及停止跟踪

alter session set events ‘&event trace name context forever,level &level’;

alter session set events ‘&event trace name context off’;

exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);

oradebug event 10046 trace name context forever,level 12

关于event跟踪的详细论述大家可以参考hrb_qiuyb的贴子:

http://blog.csdn.net/hrb_qiuyb/archive/2004/06/30/30559.aspx

dba终结者之路2 : http://blog.itpub.net/post/96/15634

如果没有网络,oracle实例无法建立

昨天在家试验了好多次,创建oracle实例都没有成功,今天来公司,就能创建了。我把网络down掉后又不能建立了。

我才弄明白,如果网络down掉就不能建立oracle实例。如果在没有网络的环境下,只要把网络口up起来就ok了。

你可以把只带一个RJ45的网线的另一头交叉接短路也可以把网络UP起来,从而在没有网络环境的时候也能建立oracle实例。

登陆SQL*PLUS不能用SYS和SYSTEM账户,可以用SCOTT。