NC数据库日常维护.docx

上传人:b****3 文档编号:12624322 上传时间:2023-04-21 格式:DOCX 页数:31 大小:27.99KB
下载 相关 举报
NC数据库日常维护.docx_第1页
第1页 / 共31页
NC数据库日常维护.docx_第2页
第2页 / 共31页
NC数据库日常维护.docx_第3页
第3页 / 共31页
NC数据库日常维护.docx_第4页
第4页 / 共31页
NC数据库日常维护.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

NC数据库日常维护.docx

《NC数据库日常维护.docx》由会员分享,可在线阅读,更多相关《NC数据库日常维护.docx(31页珍藏版)》请在冰豆网上搜索。

NC数据库日常维护.docx

NC数据库日常维护

目录

一.日常操作2

(一)Oracle数据库2

1.数据库的启动:

2

2.用户口令的修改:

2

3.数据库参数文件SPFILE与PFILE2

(二).DB2数据库的常用操作3

二.备份与恢复3

(一)Oracle的逻辑备份与恢复3

1.逻辑备份3

2.逻辑恢复4

(二)DB2的备份与恢复4

1.备份4

2.恢复5

三.执行统计分析更新5

(一)Oracle:

5

(二)DB25

(三)SQLServer6

四.重建索引6

(一)oracle6

(二)db26

(三)sqlserver:

7

附件一.纠正oracle临时表统计信息的方案8

附件二.Oracle客户端连接服务器的出错处理13

附件三.Oracle优化说明14

 

一.日常操作

(一)Oracle数据库

1.数据库的启动:

(1)启动数据库实例(Unix/Linux系统需切换到Oracle用户下):

sqlplus“/assysdba”

startup(启动数据库实例)

shutdownimmediate(关闭数据库实例)

(2)启动/关闭数据库监听进程.

lsnrctl

LSNRCTL>start(启动监听)

LSNRCTL>stop(关闭监听)

2.用户口令的修改:

SQL>ALTERUSER“用户名”IDENTIFIEDBY“新口令”

如果数据库管理员的口令丢失,可执行如下步骤:

sqlplus“/assysdba”

SQL>ALTERUSER“sys”IDENTIFIEDBY“新口令”

SQL>ALTERUSER“system”IDENTIFIEDBY“新口令”

3.数据库参数文件SPFILE与PFILE

(假设Oracle安装在D:

\Oracle目录下)

(1)SPFILE文件:

存储在D:

\Oracle\ora92\database目录下,为二进制的参数文件,无法直接编辑.

文件名为”SPFILE+例程名.ora”

(2)PFILE文件:

存储在D:

\Oracle\ora92\database目录下,为文本的参数文件,可直接修改.文件名为”init+例程名.ora”,打开此文件,内容为”IFILE=’d:

\oracle\admin\实例名\pfile\init.ora’”,也就是说真正的参数文件为init.ora,此文件为文本文件,可直接编辑.

(3)数据库启动所使用的参数文件.

数据库启动时,首先寻找”SPFILE+例程名.ora”文件,若文件存在,就按照文件设

置的参数启动例程;若”SPFILE+例程名.ora”文件不存在,转向寻找”init+例程名.ora”文件,按照”init+例程名.ora”文件里指定的实际参数文件init.ora的参数启动例程.

(4)SPFILE和PFILE的相互转换.

a)用SPFILE文件创建PFILE文件.

Createspfile=’spfile路径’frompfile=’pfile路径’;

b)用PFILE文件创建SPFILE文件.

Createpfile=’pfile路径’fromspfile=’spfile路径’;

(二).DB2数据库的常用操作

1.启动数据库

db2start

2.停止数据库

db2stop

3.连接数据库

db2connecttoo_yduserdb2usingpwd

4.读数据库管理程序配置

db2getdbmcfg

5.写数据库管理程序配置

db2updatedbmcfgusing参数名参数值

6.读数据库的配置

db2connectto数据库名userdb2usingpwd

db2getdbcfgfor数据库名

7.写数据库的配置

db2connectto数据库名userdb2usingpwd

db2updatedbcfgfor数据库名using参数名参数值

8.关闭所有应用连接

db2forceapplicationall

9.执行一个sql文件

db2–tfsql文件名

(文件中每一条命令用;结束)

10.列出所有的系统表

 listtablesforsystem

 

二.备份与恢复

(一)Oracle的逻辑备份与恢复

1.逻辑备份

使用EXP命令,exphelp=y得到所有关于exp命令的参数

例:

将nc30用户的所有数据备份到nc30bak.dmp文件中.

expnc30/1@ncdbowner=nc30file=nc30bak.dmplog=exp.log

其中:

nc30/1:

nc的Oracle用户名与密码

ncdb:

Oracle的实例名

nc30bak.dmp:

为导出文件

exp.log:

导出过程的log文件.

2.逻辑恢复

使用IMP命令,用imphelp=y得到所有关于exp命令的参数

例:

将nc30bak.dmp文件中的nc30用户的所有数据恢复到nc30new用户下.

impnc30new/1@ncdbfromuser=nc30touser=nc30newfile=nc30bak.dmplog=imp.log

其中:

nc30/1:

要导入的Oracle用户名与密码

ncdb:

Oracle的实例名

nc30:

导出时的Oracle用户名

nc30new:

要导入数据到此Oracle用户下

nc30bak.dmp:

为导出文件

imp.log:

导入过程的log文件.

(二)DB2的备份与恢复

1.备份

通过DB2控制中心图形界面备份,右键点击选中的数据库,选择备份数据库,根据提示操作即可;

命令行操作

db2backupdbdbnametobackupdir

注释:

该命令有丰富参数,可以使用命令db2?

backupdb查看。

在命令行下输入db2?

msg,msg可以是错误提示信息如SQL1013N,也可以是某个命令如backupdb。

注意事项

windows服务器的备份文件放在一个较深的目录结构下,注意复制时要保留目录结构,例:

C:

\MYDB.0\DB2\NODE0000\CATN0000\20030401\120001.001

备份如果提示有活动应用程序连接,则在确认事务都已经提交后,断调连接后再备份

db2forceapplicationall

对于用于不同操作系统下数据库恢复目的的数据库备份:

假如,你的数据库在AIX平台上,你想在WIN平台上来恢复数据环境,可用dbmove来做。

dbmove只导出了表结构与表数据,而其他如视图等对象并没有被创建,所以还要用db2look做一个库结构的备份。

操作步骤如下所示:

db2look–ddbname–udb2inst1–e–od:

\credb.sql–idb2inst1–wdb2inst1

db2movedbnameexport–tcdb2inst1–udb2inst1–pdb2inst1

2.恢复

通过控制中心图形界面恢复,右键点击指定实例下面的数据库,选择“根据备份创建数据库”,根据提示操作;

命令行操作

db2restoredbdbnamefrombackupdir

对于通过dbmove来的数据我们如何做恢复呢?

步骤如下:

dbmovedbnameimport–tcdb2inst1–udb2inst1–pdb2inst1

db2connecttodbnameuserdb2inst1usingdb2inst1

db2–tvfd:

\credb.sql>credb.log

执行以上步骤后打开credb.log文件查看有哪些异常,在日志文件中前半部份涉及到创建表的语句会报错,因为通过dbmove后表已创建起来,我们把他当做正常错误来看待。

关键是要看后面的涉及到表的约束条件及索引、视图、触发器的建立是否正常。

三.执行统计分析更新

作用:

保证统计信息的最新与准确性最好每周做一下统计信息更新:

(一)Oracle:

使用sqlplus以要更新的用户身份登陆到数据库,执行:

begin

dbms_stats.gather_schema_stats(ownname=>‘(用户名)’,cascade=>TRUE);

end;

上述语句会把该用户模式下的所有表、索引的统计信息更新。

如果只想更新其中某个对象的统计信息,可执行analyzetable表名 computestatisticsanalyzetable表名computestatisticsforallindexes;analyzetable表名computestatisticsforallcolumns;

(二)DB2

以表的所有者的用户权限登陆数据库,执行:

reorgchkupdatestatisticsontableall

上述语句会更新该数据库内该用户所拥有的所有表、索引的统计信息

如果只想更新其中某个对象的统计信息,可执行

RUNSTATSONTABLE(表名)andindexesall

(三)SQLServer

使用QueryAnalyzer登陆到SQLServer,执行:

use用户数据库名称

sp_updatestats

上述语句会把该数据库内的所有表、索引的统计信息更新。

如果只想更新其中某个对象的统计信息,可执行:

UPDATESTATISTICS表名

四.重建索引

如果系统已经运行三月以上,并且数据变化很大,可以考虑重建索引.

(一)oracle

执行:

setpagesize20000

spoolc:

\index.sql;

select‘alterindex‘||index_name||’rebuildonline;’fromuser_indexes;

spooloff;

编辑c:

\index.sql文件,删除除’alterindex......’外的其他内容。

运行:

@@c:

\index.sql;

 

(二)db2

在用户数据库先执行:

select‘REORGTABLE‘||rtrim(TBCREATOR)||’.’||TBNAME||’INDEX‘||rtrim(CREATOR)||’.’||NAMEfromsysibm.sysindexes

然后把运行结果执行

(三)sqlserver:

在用户数据库先执行:

select‘dbccdbreindex(‘+name+’)’fromsysobjectswherextype=’u’

然后把运行结果执行

附件一.纠正oracle临时表统计信息的方案

针对NC产品版本:

1.NC产品230打过临时表patch的用户

2.NC产品V30用户

1.问题描述

nc产品运行中,当遇到多表关联查询包含临时表的时候,往往会出现执行时间较长的效率问题。

2.问题原因

这是因为oracle的cost优化器,在处理没有统计信息的临时表时,经常会选择不良的执行计划,导致一个查询耗时很长的显像。

3.解决方法

根据nc产品的sql特征,认为,手工对临时表指定统计信息,是对于这个问题较好的解决方案。

为了避免复杂手工命令步骤,提供以下存储过程来统一实现多个临时表的统计信息指定。

请大家务必严格按步骤执行。

4.结果描述

避免了oracle在有关临时表查询是选择不良的执行计划,提高了类似查询的执行效率.

5.执行步骤

(1)创建procudure:

在sqlplus中以在nc的用户下执行以下创建procedure的脚本:

CREATEORREPLACEPROCEDUREINRT_STATISTICS

AS

V_TABLENAMEVARCHAR2(50);--table的名称

V_USERNAMEVARCHAR2(50);

V_SQLVARCHAR2(500);

V_SQL1VARCHAR2(500);

--游标

CURSORCUR_TABLEIS

SELECTTABLE_NAMEFROMUSER_TABLESWHERETABLESPACE_NAMEISNULL;

BEGIN

SELECTUSERINTOV_USERNAMEFROMDUAL;

OPENCUR_TABLE;

LOOP

FETCHCUR_TABLEINTOV_TABLENAME;

EXITWHENCUR_TABLE%NOTFOUND;

V_SQL:

='analyzetable'||V_TABLENAME||'deletestatistics';

V_SQL1:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME||''',tabname=>'''||V_TABLENAME||''',numrows=>2000,numblks=>70);END;';

EXECUTEIMMEDIATEV_SQL;

EXECUTEIMMEDIATEV_SQL1;

ENDLOOP;

V_SQL:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME||''',tabname=>''IA_ENDHANDLE'',numrows=>1000,numblks=>15);END;';

EXECUTEIMMEDIATEV_SQL;

V_SQL:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME||''',tabname=>''FA_TEMP_DEP_N'',numrows=>10000,numblks=>100);END;';

EXECUTEIMMEDIATEV_SQL;

--关闭游标

CLOSECUR_TABLE;

EXCEPTION

WHENOTHERSTHEN

IFCUR_TABLE%ISOPENTHEN

CLOSECUR_TABLE;

ENDIF;

ENDINRT_STATISTICS;

/

如果得到以下提示,表示创建成功:

Procedurecreated(或同意的中文提示)。

如:

MicrosoftWindows2000[Version5.00.2195]

(C)版权所有1985-2000MicrosoftCorp.

C:

\DocumentsandSettings\duanl>sqlplus

SQL*Plus:

Release8.1.7.0.0-Productionon星期一9月2713:

05:

532004

(c)Copyright2000OracleCorporation.Allrightsreserved.

请输入用户名:

NCUSER

请输入口令:

连接到:

Oracle8iEnterpriseEditionRelease8.1.7.4.1-Production

WiththePartitioningoption

JServerRelease8.1.7.4.1-Production

SQL>CREATEORREPLACEPROCEDUREINRT_STATISTICS

2AS

3V_TABLENAMEVARCHAR2(50);--table的名称

4V_USERNAMEVARCHAR2(50);

5V_SQLVARCHAR2(500);

6V_SQL1VARCHAR2(500);

7

8--游标

9

10CURSORCUR_TABLEIS

11SELECTTABLE_NAMEFROMUSER_TABLESWHERETABLESPACE_NAMEISNULL;

12

13BEGIN

14SELECTUSERINTOV_USERNAMEFROMDUAL;

15

16OPENCUR_TABLE;

17LOOP

18FETCHCUR_TABLEINTOV_TABLENAME;

19

20EXITWHENCUR_TABLE%NOTFOUND;

21

22V_SQL:

='analyzetable'||V_TABLENAME||'deletestatistics';

23V_SQL1:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME

||''',tabname=>'''||V_TABLENAME||''',numrows=>2000,numblks=>70);END;';

24

25EXECUTEIMMEDIATEV_SQL;

26EXECUTEIMMEDIATEV_SQL1;

27

28ENDLOOP;

29

30V_SQL:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME||'

'',tabname=>''IA_ENDHANDLE'',numrows=>1000,numblks=>15);END;';

31EXECUTEIMMEDIATEV_SQL;

32

33V_SQL:

='BEGINdbms_stats.set_table_stats(ownname=>'''||V_USERNAME||'

'',tabname=>''FA_TEMP_DEP_N'',numrows=>10000,numblks=>100);END;';

34EXECUTEIMMEDIATEV_SQL;

35

36--关闭游标

37CLOSECUR_TABLE;

38

39EXCEPTION

40WHENOTHERSTHEN

41IFCUR_TABLE%ISOPENTHEN

42CLOSECUR_TABLE;

43ENDIF;

44ENDINRT_STATISTICS;

45/

过程已创建。

(2)执行该存储过程:

a.如

(1)得到成功提示后,在nc用户下执行:

execINRT_STATISTICS;

指定临时表统计信息。

SQL>execINRT_STATISTICS;

PL/SQL过程已成功完成。

b.如

(1)返回有错误提示,执行:

showerror

并把显示结果发回NC本部设计部。

SQL>showerror

PROCEDUREINRT_STATISTICS出现错误:

LINE/COLERROR

-------------------------------------------------------------------------

30/73PLS-00103:

出现符号

"',tabname=>'IA_ENDHANDLE',numrows=>1000,numblks=>15);END;"在需要

下列之一时:

.(*@%&=-+;atinmodnotrem<>or!

=or~=>=

<=<>andorlikebetweenisnullisnot||isdangling

符号"."被替换为

"',tabname=>'IA_ENDHANDLE',numrows=>1000,numblks=>15);END;"

后继续。

6.另外提供定制job

定时完成这个功能的脚本,

将存储过程定时job:

variablejobnonumber;

variableinstnonumber;

begin

selectinstance_numberinto:

instnofromv$instance;

dbms_job.submit(:

jobno,'BEGININRT_STATISTICS;END;',trunc(trunc(sysdate)+23/24,'HH'),'trunc(SYSDATE+1,''HH'')',TRUE,:

instno);

commit;

end;

/

SQL>variablejobnonumber;

SQL>variableinstnonumber;

SQL>begin

2selectinstance_numberinto:

instnofromv$instance;

3dbms_job.submit(:

jobno,'BEGININRT_STATISTICS;END;',trunc(trunc(sysdate)+23/24,'HH'),'trunc(SYSDATE+1,''HH'')',TRUE,:

instno);

4commit;

5end;

6/

PL/SQL过程已成功完成。

这个可代替上述步骤5-

(2)a

时间定制为每天晚上11点.

要执行这个job,必须先确定数据库参数:

job_queue_processes

在sqlplus中用这个命令来查看参数:

showparameterjob_queue_processes

如果该参数值为0,在sqlplus中用以下命令先进行修改:

altersystemsetjob_queue_processes=10;

SQL>showparameterjob_queue_processes

NAMETYPEVALUE

-------------------------------------------------------------------------

job_queue_processesinteger4

SQL>altersystemsetjob_queue_processes=10;

系统已更改。

7.相关说明

以上提供的方案,对数据库系统资源消耗较小,可以在业务使用的时候执行.

 

附件二.Oracle客户端连接服务器的出错处理

一.ORA-12560:

TNS:

协议适配器错误

造成ORA-12560:

TNS:

协议适配器错误的问题的原因有三个:

1.监听服务没有起起来。

windows平台个一如下操作:

开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1