oracle故障排查及维护
故障排查是一个复杂且专业的过程,通常涉及以下步骤:
1.识别问题:检查系统日志、警告日志和跟踪文件,了解故障的具体表现。
2.诊断工具:使用Oracle提供的诊断工具如SQL*Plus、SQL Developer、AWR (Automatic Workload Repository) Report等。
3.检查系统资源:确认操作系统资源(如CPU、内存、磁盘空间)是否足够。
4.检查网络:如果数据库运行在网络环境中,确认网络连接是否正常。
5.检查Oracle进程:使用命令如ps -ef | grep ora查看Oracle进程状态。
6.检查数据库实例:使用SQL*Plus连接到数据库并执行SELECT查询,检查数据库实例状态。
7.检查连接:如果问题涉及客户端连接,检查监听器状态和网络配置。
8.查看参数文件:检查数据库的初始化参数文件,确认参数设置是否正确,(init.ora或spfile.ora)。
9.执行健康检查:使用Oracle提供的健康检查脚本,如dbca的健康检查选项。
10.查询性能:如果问题是性能相关,使用AWR报告分析系统瓶颈。
11.查询锁和等待:使用数据字典视图如V L O C K 、 V LOCK、V LOCK、VSESSION、V$LATCH等查询锁定和等待情况。
12.查询系统统计:使用动态性能视图V$SYSSTAT查看系统统计信息。
13.查询故障转储:如果数据库崩溃,检查系统的core dump和Oracle的trace文件。
查询数据库的版本信息: SELECT * FROM v
v
e
r
s
i
o
n
;
查询数据库的实例名称:
S
E
L
E
C
T
i
n
s
t
a
n
c
e
n
a
m
e
F
R
O
M
v
version; 查询数据库的实例名称:SELECT instance_name FROM v
version;查询数据库的实例名称:SELECTinstancenameFROMvinstance;
查询数据库名称:SELECT name FROM v
d
a
t
a
b
a
s
e
;
查询数据库的启动时间:
S
E
L
E
C
T
s
t
a
r
t
e
d
u
p
F
R
O
M
v
database; 查询数据库的启动时间:SELECT started_up FROM v
database;查询数据库的启动时间:SELECTstartedupFROMvinstance;
查询所有的表空间:SELECT tablespace_name FROM dba_tablespaces;
查询表空间的大小:
SELECT
tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 2) total_space
FROM
dba_data_files
ORDER BY
tablespace_name;
查询表空间的使用情况:SELECT
df.tablespace_name,
total_space - NVL(used_space, 0) AS free_space
FROM
(SELECT
tablespace_name,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS total_space
FROM
dba_data_files
GROUP BY
tablespace_name) df
LEFT JOIN
(SELECT
tablespace_name,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS used_space
FROM
dba_segments
GROUP BY
tablespace_name) df1
ON
df.tablespace_name = df1.tablespace_name;
查询所有用户:SELECT username FROM dba_users;
查询用户的系统权限:SELECT * FROM dba_sys_privs;
查询用户的对象权限:SELECT * FROM dba_tab_privs;
查询当前活跃的会话:SELECT * FROM v
s
e
s
s
i
o
n
;
查询当前锁定的对象:
S
E
L
E
C
T
∗
F
R
O
M
v
session; 查询当前锁定的对象:SELECT * FROM v
session;查询当前锁定的对象:SELECT∗FROMvlocked_object;
查询系统的资源限制:SELECT * FROM v
p
a
r
a
m
e
t
e
r
W
H
E
R
E
n
a
m
e
L
I
K
E
′
查询系统的性能统计信息:
S
E
L
E
C
T
∗
F
R
O
M
v
parameter WHERE name LIKE '%limit%'; 查询系统的性能统计信息:SELECT * FROM v
parameterWHEREnameLIKE′查询系统的性能统计信息:SELECT∗FROMvsysstat;
查询数据文件的路径:SELECT
file_name,
bytes / (1024 * 1024) as space
FROM
dba_data_files;
查询表的大小:SELECT
segment_name,
segment_type,
bytes / (1024 * 1024) as size_mb
FROM
dba_segments
WHERE
segment_type = ‘TABLE’;
查询正在运行的SQL语句:SELECT * FROM v$sql;
常用的修改命令主要包括以下几种:
修改表结构:
增加列:ALTER TABLE table_name ADD column_name column_datatype;
修改列:ALTER TABLE table_name MODIFY column_name new_column_datatype;
删除列:ALTER TABLE table_name DROP COLUMN column_name;
重命名列:ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
修改数据:
插入数据:INSERT INTO table_name (column1, column2,…) VALUES (value1, value2,…);
更新数据:UPDATE table_name SET column1 = value1, column2 = value2,… WHERE condition;
删除数据:DELETE FROM table_name WHERE condition;
修改权限和角色:
授权:GRANT privilege TO user_name;
回收:REVOKE privilege FROM user_name;
创建角色:CREATE ROLE role_name;
授权角色:GRANT role_name TO user_name;
修改用户和密码:
创建用户:CREATE USER user_name IDENTIFIED BY password;
修改密码:ALTER USER user_name IDENTIFIED BY new_password;
修改表空间和配额:
创建表空间:CREATE TABLESPACE tablespace_name DATAFILE ‘filename.dbf’ SIZE size;
修改表空间大小:ALTER DATABASE DATAFILE ‘filename.dbf’ RESIZE new_size;
设置用户表空间配额:ALTER USER user_name QUOTA unlimited ON tablespace_name;
修改数据库参数:
查看参数:SELECT * FROM v$parameter;
修改参数:ALTER SYSTEM SET parameter_name = value SCOPE = BOTH;