当前位置:首页 » 网页前端 » dba故障速查脚本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

dba故障速查脚本

发布时间: 2023-04-23 23:30:17

⑴ 从dba的角度,有哪些手段进行数据安全性的保障

有人说,数据库管理员(DBA)有三个基本任务。按照重要性大小的顺序进行排列,它们分别是:保护数据、保护数据再保护数据。

虽然数据完整性显然是DBA的首要职责(如果数据“质量”不好的话,谁在乎数据库是不是可用的或快速的),不过除此之外,他还有很多其它工作要做。下面就列出了一个DBA日常执行的实际工作。(有些任务是所有DBA通用的,其它的则是需要在某些特殊的数据库环境才需要完成的)。

DBA的一般任务

◆安装、配置、升级和迁移

虽然系统管理员通常负责安装、维护服务器上的硬件和操作系统,不过数据库软件的安装通常是由DBA负责的。要胜任这一工作需要了解什么样的硬件配置才能使一个数据库服务器发挥最大的作用,并且还要就这些硬件需求与系统管理员进行沟通。在完成了上述工作之后,DBA就着手安装数据库软件,并从各种不同的产品配置选项中选择一个与硬件匹配的并且能使数据库效率最高的方案。当有新版本的数据库或者补丁包发布时,决定是否要用或者用哪一个升级或补丁包也是DBA的工作之一。如果企业购买了新的数据库服务器,那么DBA也要负责将数据从原有数据库服务器中迁移到新的服务器上来。

◆备份和恢复

DBA负责为他们所管理的数据库制定、实施并定期测试数据库备份和恢复方案。即使在一个大型企业中有一个单独的系统管理员专门负责数据库的备份工作,不过最终的决定权还是由DBA掌握---他来确保备份工作要如期完成,并且在数据库出现故障执行恢复工作后,能包含所需要的所有文件。当数据库故障发生时,DBA需要知道如何使用备份使数据库返尽快回到正常状态,会丢失任何所完成的事务。数据库出现故障的原因可能又很多种,当出现故障时,DBA必须能很快就能判断出故障所在并采取有效的应对策略。从商业的角度来看,数据库备份是有成本的,DBA需要让企业的管理人员知道各种数据库备份方法的成本和风险。

◆数据库安全

因为数据库主要负责集中存储数据,这些数据有可能是非常机密并且非常有价值的,因此数据库往往是黑客甚至好奇的员工最感兴趣的目标。DBA必须了解所用数据库产品的详细安全模型、该数据库产品的用途、以及如何使用它来有效地控制数据存取。DBA最基本的三个安全任务是验证(设置用户帐户控制用户登录数据库)、授权(对数据库的各部分设置权限,防止非法用户访问)、审计(跟踪用户执行了什么数据库操作)。就目前而言,因为监管法规比如Sarbanes-Oxley 和HIPAA的报告要求必须得到满足,这使得数据库审计工作尤为重要。

◆存储和容量规划

创建数据库得一个主要目就是存储和检索数据,所以规划需要多少磁盘存储空间和监测可用的磁盘存储空间是DBA的关键责任。观察数据的增长趋势也是非常重要的,因为只有这样DBA才能向企业的管理层提出一个长远的存储容量规划。

◆性能监控和调整

DBA负责定期监测数据库服务器,从而找出数据库瓶颈(使数据库性能降低的某些部分)并制定补救措施。对数据库服务器的调整工作要在多个层次上完成。数据库服务器硬件的性能以及操作系统的配置都可能成为造成数据库瓶颈的因素,同样数据库软件的配置也是如此。数据库在磁盘驱动器上的物理安装方式以及索引的选择对于数据库的性能也有影响。数据库查询的编码方式也可能显着改变查询结果返回的快慢程度。DBA需要了解在上述各个层次需要用哪些监测工具,以及如何使用它们来调整系统。从应用设计一开始把性能因素考虑在内是积极主动调整的反映,而不是等待问题发生之后再去修复它们。DBA还需要与数据库应用开发人员紧密合作,以确保应用是按照最佳方式开发出来的,并且能带来良好的性能。

◆疑难解答

当数据库服务器出现某些差错的时候,DBA需要知道如何快速确定问题所在并正确地解决问题,保证不丢失数据或使情况变得更糟。

特殊环境下DBA的任务

除了上述基本职责外,由于某些特殊的数据库环境,一些DBA们还需要掌握一些特别的技巧。

◆高可用性

随着互联网时代的到来,过去那种数据库只需要在白天正常运转的时代已经结束了,现在数据库必须能够提供须提供每周7天每天24小时的全天候服务。网站也已经从静态的、预定义的内容发展成为动态创建的内容---在页面请求发送过来之后,使用数据库创建页面布局。如果网站是全天候可用的,那么支持网站的基础数据库也必须能够全天候工作。在这种环境下管理数据库,DBA需要知道哪些类型的维护业务可以在线完成(也就是在不中断数据库运行的情况下),以及在数据库有可能关闭时制定一个维护“期限”。此外,DBA还要规划为冗余的数据库硬件和软件组件,以便万一数据库出现故障时,冗余系统仍然能够继续要用户提供服务。DBA可以使用在线备份、集群、复制和应急数据库等技术和工具确保更高的可用性。

◆大型数据库(VLDB)

随着企业发现数据库技术的用途越来越多,他们往往用它来保存更多的数据。此外,数据库存储的数据类型也发生了变化,从过去行列整齐的结构化数据发展现在的非结构化数据,比如文件、图像、声音、甚至指纹。这两种趋势带来的结果是一样的:那就是大型数据库(VLDB)的出现。要管理VLDB,DBA需要特殊的技能。过去被认为是非常简单的操作比如复制一个表,所需要的时间可能是非常巨大的。为了保证数据库扩展到非常大的规模时仍然是可管理的,DBA需要了解一些技术,比如表分割(Oracle)、联合数据库(sql Server)和复制(MySQL)等等。

◆数据提取、转化和加载(ETL)

在数据仓库环境中,一个非常关键的任务是如何有效地加载数据仓库或数据集市中的大量数据,而这些数据是从多个现有的生产系统中提取的。通常情况下,这些生产系统的格式与数据仓库中的标准化定义是不同的,所以数据在加载之前必须要转化(或“清洗”)。在一个特定的公司里,提取数据可能是也可能不是DBA的责任,但是DBA需要确定什么样的提取是有用的,它是数据库决策团队一个关键组成部分。

⑵ dba怎么兼职

DBA(数据库管理员)是一种特殊的技术职业,可以从事多种兼职工作。

1、数据库安装和配置:DBA可以安装和配置多种数据库,包括Oracle,MySQL,SQL Server,PostgreSQL等,并能够局渗根据客户的需求对数据库进行优化和定制。

2、数据库维护:DBA可以定期对数据库进行扫描,及时发现和修复数据库中的问题,同时也能够根据需要定期备份数据库模腊昌。

3、数据库优化:DBA可以分析数据库的工作负载,根据客户的业务需求,对数据库进行优化,以提高数据库性能。

4、数据库恢复:当数据库发生故障时,DBA可以根据备份资料,进行数据旦扒库恢复。

5、咨询服务:DBA可以提供专业的数据库咨询服务,帮助客户解决数据库相关的技术问题,并为客户提供技术指导。

⑶ oracle数据库经常会出现占用cpu100%的进程,然后系统就挂了,怎么找出引起这种故障的sql语句

在故障发生时,尝试用下面的语句抓取数据库引起故障的点。

/*********************************************************************************************/
在oracle中监控死锁
/*********************************************************************************************/
SELECT sn.username,
m.SID,
sn.SERIAL#,
m.TYPE,
DECODE(m.lmode,
0,
'None',
1,
'Null',
2,
'Row Share',
3,
'Row Excl.',
4,
'Share',
5,
'S/Row Excl.',
6,
'Exclusive',
lmode,
LTRIM(TO_CHAR(lmode, '990'))) lmode,
DECODE(m.request,
0,
'None',
1,
'Null',
2,
'Row Share',
3,
'Row Excl.',
4,
'Share',
5,
'S/Row Excl.',
6,
'Exclusive',
request,
LTRIM(TO_CHAR(m.request, '990'))) request,
m.id1,
m.id2
FROM v$session sn, v$lock m
WHERE (sn.SID = m.SID AND m.request != 0) --存在锁请求,即被阻塞
OR (sn.SID = m.SID --不存在锁请求,但是锁定的对象被其他会话请求锁定
AND m.request = 0 AND lmode != 4 AND
(id1, id2) IN (SELECT s.id1, s.id2
FROM v$lock s
WHERE request != 0
AND s.id1 = m.id1
AND s.id2 = m.id2))
ORDER BY id1, id2, m.request;

/*********************************************************************************************/
定位引起oracle死锁的sql
/*********************************************************************************************/

select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))

/*********************************************************************************************/
下面的SQL查询可以用于确定锁住数据库对象的锁:
/*********************************************************************************************/
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;

/*********************************************************************************************/
显示哪些会话被锁住
/*********************************************************************************************/
/* showlock.sql */
COLUMN o_name format a10
COLUMN lock_type format a20
COLUMN object_name format a15
SELECT RPAD (oracle_username, 10) o_name, session_id SID,
DECODE (locked_mode,
0, 'None',
1, 'Null',
2, 'Row share',
3, 'Row Execlusive',
4, 'Share',
5, 'Share Row Exclusive',
6, 'Exclusive'
) lock_type,
object_name, xisn, xidslot, xidsqn
FROM v$locked_object, all_objects
WHERE v$locked_object.object_id = all_objects.object_id;

/*********************************************************************************************/
显示所有的TM和TX锁
/*********************************************************************************************/
/* showalllock.sql */
SELECT SID, TYPE, id1, id2,
DECODE (lmode,
0, 'None',
1, 'Null',
2, 'Row share',
3, 'Row Exclusive',
4, 'Share',
5, 'Share Row Exclusive',
6, 'Exclusive'
) lock_type,
request, ctime, BLOCK
FROM v$lock
WHERE TYPE IN ('TX', 'TM');

/*********************************************************************************************/
在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session
的paddr都被更改为相同的进程地址:
/*********************************************************************************************/
alter system kill session 'sid,serial#' ;

/*********************************************************************************************/
在oracle中kill掉的进程有时还需要等待pmon回滚数据库已经占有的资源
有时候我们需要使用下面的脚本找出那些已经在oracle中kill掉的进程,在操作系统中在kill一次
/*********************************************************************************************/

select p.addr from v$process p where pid <> 1
minus
select s.paddr from v$session s;

$ kill -9 &paddr