Linux系统下Oracle数据库的管理涉及众多命令,涵盖数据库启动关闭、用户权限、表空间管理、性能监控等多个方面,以下从不同场景分类整理常用命令及操作示例,帮助用户高效管理Oracle数据库。

数据库启动与关闭
-
启动数据库
- 启动到 nomount 状态(仅加载参数文件):
sqlplus / as sysdba SQL> startup nomount;
- 启动到 mount 状态(加载数据文件,不打开):
SQL> startup mount;
- 启动到 open 状态(完全启动):
SQL> startup;
- 强制启动(需谨慎,可能引发数据损坏):
SQL> startup force;
- 启动到 nomount 状态(仅加载参数文件):
-
关闭数据库
- 正常关闭(等待会话结束):
SQL> shutdown normal;
- 立即关闭(不等待会话结束):
SQL> shutdown immediate;
- 事务关闭(等待事务提交后关闭):
SQL> shutdown transactional;
- 终止关闭(强制关闭,可能导致数据丢失):
SQL> shutdown abort;
- 正常关闭(等待会话结束):
用户与权限管理
-
创建用户
SQL> CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
-
授权角色
(图片来源网络,侵删)SQL> GRANT connect, resource TO username; SQL> GRANT dba TO username; -- 超级管理员权限
-
撤销权限
SQL> REVOKE dba FROM username;
-
查看用户信息
SQL> SELECT username, default_tablespace, temporary_tablespace FROM dba_users WHERE username = 'USERNAME';
表空间与数据文件管理
-
创建表空间
SQL> CREATE TABLESPACE tbs_data DATAFILE '/u01/oradata/tbs_data.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 2G;
-
扩展表空间
(图片来源网络,侵删)SQL> ALTER TABLESPACE tbs_data ADD DATAFILE '/u01/oradata/tbs_data_01.dbf' SIZE 200M;
-
查看表空间使用情况
SQL> SELECT tablespace_name, ROUND(used_space*8/1024, 2) "Used (GB)", ROUND(tablespace_size*8/1024, 2) "Total (GB)" FROM dba_tablespace_usage_metrics;
表与索引管理
-
创建表
SQL> CREATE TABLE emp (empno NUMBER(4), ename VARCHAR2(10)) TABLESPACE users;
-
创建索引
SQL> CREATE INDEX idx_emp_ename ON emp(ename) TABLESPACE users;
-
重建索引
SQL> ALTER INDEX idx_emp_ename REBUILD;
性能监控命令
-
查看当前会话
SQL> SELECT sid, serial#, username, program FROM v$session WHERE username IS NOT NULL;
-
查看等待事件
SQL> SELECT event, total_waits, time_waited FROM v$system_event WHERE total_waits > 0;
-
检查SQL执行计划
SQL> EXPLAIN PLAN FOR SELECT * FROM emp WHERE ename = 'SMITH'; SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
备份与恢复
-
使用RMAN进行备份
rman target / RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-
数据泵导出(EXPDP)
expdp system/password DIRECTORY=dpump_dir DUMPFILE=expdp.dmp SCHEMAS=hr
-
数据泵导入(IMPDP)
impdp system/password DIRECTORY=dpump_dir DUMPFILE=expdp.dmp SCHEMAS=hr
常用Linux与Oracle结合命令
-
查看Oracle监听状态
lsnrctl status
-
启动/停止监听
lsnrctl start lsnrctl stop
-
查看Oracle进程
ps -ef | grep ora_ | grep -v grep
-
查看Oracle日志
tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log
常用命令速查表
功能分类 | 命令示例 |
---|---|
连接数据库 | sqlplus / as sysdba |
查看表空间大小 | SELECT tablespace_name, SUM(bytes)/1024/1024 "Size(MB)" FROM dba_data_files GROUP BY tablespace_name; |
查看锁表信息 | SELECT object_name, machine, sid FROM v$locked_object, dba_objects, v$session WHERE v$locked_object.object_id=dba_objects.object_id AND v$locked_object.session_id=v$session.sid; |
清理临时表空间 | ALTER TABLESPACE temp SHRINK SPACE; |
查看数据库版本 | SELECT * FROM v$version; |
FAQs
如何解决Oracle数据库启动时报错“ORA-01078: failure in processing system parameters”
解答:该错误通常因参数文件(spfile/pfile)路径错误或内容损坏导致,可通过以下步骤排查:
- 检查
$ORACLE_HOME/dbs
目录下是否存在正确的spfile或pfile文件; - 确认
ORACLE_SID
环境变量是否正确设置; - 若使用pfile,检查参数文件中的
db_name
与实际数据库名称是否一致; - 尝试重新创建spfile:
SQL> CREATE SPFILE FROM PFILE='/path/to/pfile.ora';
。
如何定位并杀死阻塞的Oracle会话?
解答:可通过以下步骤操作:
- 查询阻塞源会话与被阻塞会话的对应关系:
SELECT blocking_session, blocked_session FROM v$session阻塞;
- 记录被阻塞会话的
SID
和SERIAL#
; - 强制终止会话:
ALTER SYSTEM KILL SESSION 'sid,serial#';
- 若需批量操作,可结合
v$session
与dba_objects
视图编写复杂查询筛选目标会话。