菜鸟科技网

Oracle 11g常用命令有哪些?

Oracle 11g作为企业级关系数据库管理系统,其常用命令涵盖了数据库管理、用户权限、数据操作、性能监控等多个核心场景,以下从不同维度详细梳理Oracle 11g的常用命令及操作逻辑,帮助用户高效完成日常运维与开发任务。

Oracle 11g常用命令有哪些?-图1
(图片来源网络,侵删)

数据库启动与关闭命令

Oracle数据库的启动与关闭是运维的基础操作,需根据业务场景选择不同模式。

  • 启动数据库
    -- 启动到nomount状态(仅加载实例,未加载数据文件)
    STARTUP NOMOUNT;  
    -- 启动到mount状态(加载控制文件,未打开数据文件)
    STARTUP MOUNT;  
    -- 启动到open状态(完全启动,可访问数据)
    STARTUP;  
    -- 强制启动(覆盖已存在的实例,需谨慎使用)
    STARTUP FORCE;  
  • 关闭数据库
    -- 正常关闭(等待会话断开,提交未提交事务)
    SHUTDOWN NORMAL;  
    -- 事务关闭(等待事务提交后关闭,默认选项)
    SHUTDOWN TRANSACTIONAL;  
    -- 立即关闭(未提交事务回滚,快速终止会话)
    SHUTDOWN IMMEDIATE;  
    -- 终止关闭(强制关闭,可能导致数据不一致,仅紧急情况使用)
    SHUTDOWN ABORT;  

用户与权限管理命令

Oracle通过用户与权限控制数据访问安全性,需合理分配角色与权限。

  • 用户管理
    -- 创建用户(需指定表空间、密码、配额)
    CREATE USER username IDENTIFIED BY password  
    DEFAULT TABLESPACE users  
    TEMPORARY TABLESPACE temp  
    QUOTA 100M ON users;  
    -- 修改用户密码
    ALTER USER username IDENTIFIED BY new_password;  
    -- 锁定/解锁用户
    ALTER USER username ACCOUNT LOCK;  
    ALTER USER username ACCOUNT UNLOCK;  
    -- 删除用户( CASCADE选项会删除用户所有对象)
    DROP USER username CASCADE;  
  • 权限与角色管理
    -- 授予系统权限(如DBA、CONNECT、RESOURCE)
    GRANT CREATE SESSION, CREATE TABLE TO username;  
    -- 授予对象权限(如SELECT、UPDATE、DELETE)
    GRANT SELECT, UPDATE ON schema.table TO username;  
    -- 授予角色(如预定义角色)
    GRANT CONNECT, RESOURCE TO username;  
    -- 撤销权限
    REVOKE CREATE SESSION FROM username;  

表空间与数据文件管理

表空间是Oracle存储逻辑结构,合理规划表空间可提升性能与数据管理效率。

  • 表空间操作
    -- 创建表空间(指定数据文件路径、大小、自动扩展)
    CREATE TABLESPACE tbsp_data  
    DATAFILE '/u01/oradata/tbsp_data.dbf' SIZE 500M  
    AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED  
    EXTENT MANAGEMENT LOCAL;  
    -- 创建临时表空间
    CREATE TEMPORARY TABLESPACE tbsp_temp  
    TEMPFILE '/u01/oradata/tbsp_temp.dbf' SIZE 200M  
    AUTOEXTEND ON;  
    -- 扩展表空间(手动添加数据文件)
    ALTER TABLESPACE tbsp_data  
    ADD DATAFILE '/u01/oradata/tbsp_data_2.dbf' SIZE 300M;  
    -- 删除表空间(含数据文件)
    DROP TABLESPACE tbsp_data INCLUDING CONTENTS AND DATAFILES;  
  • 表空间状态查询
    -- 查看表空间信息(名称、大小、使用率)
    SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS size_mb  
    FROM dba_data_files  
    GROUP BY tablespace_name;  
    -- 查看表空间使用情况
    SELECT a.tablespace_name, ROUND(a.bytes/1024/1024,2) AS total_mb,  
           ROUND(b.bytes/1024/1024,2) AS used_mb,  
           ROUND((b.bytes/a.bytes)*100,2) AS used_pct  
    FROM dba_data_files a, dba_free_space b  
    WHERE a.tablespace_name = b.tablespace_name(+)  
    GROUP BY a.tablespace_name, a.bytes, b.bytes;  

表与数据操作命令

表是Oracle存储数据的核心对象,掌握表与数据操作是开发的基础。

Oracle 11g常用命令有哪些?-图2
(图片来源网络,侵删)
  • 表管理
    -- 创建表(指定表空间、字段、约束)
    CREATE TABLE employees (  
      employee_id NUMBER(6) PRIMARY KEY,  
      first_name VARCHAR2(20),  
      last_name VARCHAR2(25),  
      hire_date DATE DEFAULT SYSDATE,  
      CONSTRAINT fk_dept FOREIGN KEY (department_id)  
      REFERENCES departments(department_id)  
    ) TABLESPACE users;  
    -- 修改表结构(添加字段、修改字段类型)
    ALTER TABLE employees ADD (salary NUMBER(10,2));  
    ALTER TABLE employees MODIFY (first_name VARCHAR2(30));  
    -- 删除表(CASCADE CONSTRAINTS会删除关联约束)
    DROP TABLE employees CASCADE CONSTRAINTS;  
  • 数据操作(DML)
    -- 插入数据(单行、多行、子查询)
    INSERT INTO employees (employee_id, first_name, last_name)  
    VALUES (1001, 'John', 'Doe');  
    INSERT INTO employees (employee_id, first_name, last_name)  
    SELECT employee_id, first_name, last_name FROM temp_employees;  
    -- 更新数据(带条件)
    UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;  
    -- 删除数据(带条件,慎用)
    DELETE FROM employees WHERE hire_date < TO_DATE('2020-01-01', 'YYYY-MM-DD');  

索引与约束管理

索引提升查询效率,约束保障数据完整性,二者是数据库优化的关键。

  • 索引操作
    -- 创建索引(普通索引、唯一索引、位图索引)
    CREATE INDEX idx_emp_name ON employees(last_name);  
    CREATE UNIQUE INDEX idx_emp_id ON employees(employee_id);  
    CREATE BITMAP INDEX idx_emp_dept ON employees(department_id);  
    -- 删除索引
    DROP INDEX idx_emp_name;  
  • 约束操作
    -- 添加主键约束(会自动创建唯一索引)
    ALTER TABLE employees ADD CONSTRAINT pk_emp_id PRIMARY KEY (employee_id);  
    -- 添加外键约束
    ALTER TABLE employees ADD CONSTRAINT fk_emp_dept  
    FOREIGN KEY (department_id) REFERENCES departments(department_id);  
    -- 禁用/启用约束
    ALTER TABLE employees DISABLE CONSTRAINT pk_emp_id;  
    ALTER TABLE employees ENABLE CONSTRAINT pk_emp_id;  

查询与性能监控命令

查询是数据库最频繁的操作,性能监控则保障系统稳定运行。

  • 基础查询
    -- 查询表数据(带排序、分组、连接)
    SELECT e.employee_id, e.first_name, d.department_name  
    FROM employees e JOIN departments d ON e.department_id = d.department_id  
    WHERE e.salary > 5000  
    ORDER BY e.hire_date DESC;  
    -- 分页查询(Oracle 11g使用ROWNUM)
    SELECT * FROM (  
      SELECT a.*, ROWNUM rn FROM (  
        SELECT * FROM employees ORDER BY salary DESC  
      ) a WHERE ROWNUM <= 10  
    ) WHERE rn >= 1;  
  • 性能监控
    -- 查看当前会话的SQL执行计划
    EXPLAIN PLAN FOR SELECT * FROM employees WHERE employee_id = 1001;  
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);  
    -- 查看等待事件(TOP 10)
    SELECT event, total_waits, time_waited  
    FROM v$system_event  
    ORDER BY time_waited DESC FETCH FIRST 10 ROWS ONLY;  
    -- 查看SQL执行统计(按执行次数排序)
    SELECT sql_text, executions, elapsed_time  
    FROM v$sql  
    ORDER BY executions DESC;  

备份与恢复命令

Oracle 11g支持多种备份方式,确保数据安全性与业务连续性。

  • 数据泵导出/导入(EXPDP/IMPDP)
    # 导出用户数据(命令行执行)
    expdp username/password DIRECTORY=dpump_dir DUMPFILE=exp.dmp  
    # 导入表数据
    impdp username/password DIRECTORY=dpump_dir DUMPFILE=exp.dmp TABLES=employees  
  • RMAN备份(恢复管理器)
    -- 连接到RMAN
    rman target /  
    -- 执行完整备份
    BACKUP DATABASE PLUS ARCHIVELOG;  
    -- 恢复数据库(需在MOUNT状态下执行)
    RECOVER DATABASE;  

其他实用命令

  • 序列管理
    CREATE SEQUENCE seq_emp_id  
    START WITH 1001  
    INCREMENT BY 1  
    NOCACHE;  
    SELECT seq_emp_id.NEXTVAL FROM dual;  
  • 同义词管理
    -- 创建同义词(简化表名访问)
    CREATE SYNONYM emp FOR employees;  
    -- 删除同义词
    DROP SYNONYM emp;  

相关问答FAQs

Q1:Oracle 11g中如何查看当前用户的默认表空间?
A:可通过查询dba_usersuser_users视图获取当前用户的默认表空间信息,命令如下:

Oracle 11g常用命令有哪些?-图3
(图片来源网络,侵删)
SELECT username, default_tablespace FROM user_users WHERE username = USER;  

若需查看所有用户的默认表空间,可使用dba_users视图(需DBA权限)。

Q2:Oracle 11g中如何删除重复数据并保留最新记录?
A:可通过ROWNUM结合子查询实现,假设表employees存在重复的email字段,需保留hire_date最新的记录,操作如下:

-- 创建临时表存储重复数据的最小ID(或其他唯一标识)
DELETE FROM employees e  
WHERE ROWID NOT IN (  
  SELECT MIN(ROWID)  
  FROM employees  
  GROUP BY email  
);  

或使用分析函数(Oracle 8i及以上版本支持):

DELETE FROM employees  
WHERE ROWID IN (  
  SELECT ROWID FROM (  
    SELECT ROWID, ROW_NUMBER() OVER (PARTITION BY email ORDER BY hire_date DESC) AS rn  
    FROM employees  
  ) WHERE rn > 1  
);  
分享:
扫描分享到社交APP
上一篇
下一篇