dba常用命令是数据库管理员日常工作中不可或缺的工具,涵盖了数据库的安装配置、用户管理、权限控制、数据操作、性能监控、备份恢复等多个方面,熟练掌握这些命令能够帮助DBA高效、安全地管理数据库系统,确保数据的安全性、完整性和可用性,以下将从不同维度详细介绍DBA常用的命令,并辅以表格说明,最后附上相关问答。

用户与权限管理
用户和权限管理是数据库安全的核心,DBA需要通过命令创建用户、分配权限、撤销权限以及修改用户状态。
-
创建用户
在Oracle中,使用CREATE USER命令创建新用户,CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
在MySQL中,使用
CREATE USER命令:CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
-
授予权限
Oracle中使用GRANT命令,例如授予用户连接和资源权限:
(图片来源网络,侵删)GRANT CONNECT, RESOURCE TO username;
MySQL中授予特定数据库的权限:
GRANT SELECT, INSERT ON database_name.* TO 'username'@'localhost';
-
撤销权限
使用REVOKE命令撤销已授予的权限,REVOKE INSERT ON database_name.* FROM 'username'@'localhost';
-
修改用户密码
Oracle中:ALTER USER username IDENTIFIED BY new_password;
MySQL中:
(图片来源网络,侵删)SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password'); -
锁定/解锁用户
Oracle中锁定用户:ALTER USER ACCOUNT LOCK;
解锁:
ALTER USER ACCOUNT UNLOCK;
用户与权限管理常用命令总结
| 数据库类型 | 命令类型 | 示例命令 |
|------------|----------|----------|
| Oracle | 创建用户 | CREATE USER username IDENTIFIED BY password; |
| MySQL | 创建用户 | CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; |
| Oracle | 授权 | GRANT CONNECT, RESOURCE TO username; |
| MySQL | 授权 | GRANT SELECT, INSERT ON database_name.* TO 'username'@'localhost'; |
| 通用 | 撤销权限 | REVOKE privilege ON object FROM user; |
表空间与数据文件管理
表空间是数据库中存储数据的逻辑结构,DBA需要通过命令管理表空间的创建、扩展、删除以及数据文件的维护。
-
创建表空间
Oracle中:CREATE TABLESPACE tablespace_name DATAFILE '/path/to/datafile.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
MySQL中(通过InnoDB引擎管理表空间,5.7版本后支持):
CREATE TABLESPACE tablespace_name ADD DATAFILE '/path/to/tablespace.ibd' ENGINE=InnoDB;
-
扩展表空间
Oracle中可通过ALTER TABLESPACE命令添加数据文件或自动扩展:ALTER TABLESPACE tablespace_name ADD DATAFILE '/path/to/new_datafile.dbf' SIZE 50M;
MySQL中可通过修改数据文件大小或添加新数据文件(需关闭表空间)。
-
删除表空间
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
-
查看表空间使用情况
Oracle中:SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024, 2) AS "Size(MB)" FROM dba_data_files GROUP BY tablespace_name;
MySQL中:
SELECT table_name, ROUND(data_length/1024/1024, 2) AS "Size(MB)" FROM information_schema.tables WHERE table_schema = 'database_name';
备份与恢复
备份与恢复是数据库管理的重中之重,DBA需定期执行备份操作,并在数据损坏时快速恢复。
-
冷备份(关闭数据库后备份)
Oracle中:SHUTDOWN IMMEDIATE; !cp /u01/app/oracle/oradata/orcl/*.dbf /backup/path/ STARTUP;
-
热备份(RMAN,联机备份)
Oracle中使用RMAN:RMAN> CONNECT target /; RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
MySQL中全量备份:
mysqldump -u root -p --all-databases > /backup/all_databases.sql
-
数据恢复
Oracle中通过RMAN恢复:RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE;
MySQL中恢复:
mysql -u root -p < /backup/all_databases.sql
性能监控与调优
DBA需通过命令监控数据库性能,识别瓶颈并进行优化。
-
查看当前会话
Oracle中:SELECT sid, serial#, username, program, status FROM v$session;
MySQL中:
SELECT id, user, host, db, command, time FROM information_schema.processlist;
-
查看等待事件
Oracle中:SELECT event, total_waits, time_waited FROM v$system_event ORDER BY time_waited DESC;
-
查看SQL执行计划
Oracle中:EXPLAIN PLAN FOR SELECT * FROM table_name WHERE column = value; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
MySQL中:
EXPLAIN SELECT * FROM table_name WHERE column = value;
-
查看锁信息
Oracle中:SELECT object_name, locked_mode FROM v$locked_object l, dba_objects o WHERE l.object_id = o.object_id;
MySQL中:
SELECT * FROM information_schema.innodb_tracked_transactions;
其他常用命令
-
数据库启停
Oracle中:STARTUP; -- 启动数据库 SHUTDOWN IMMEDIATE; -- 关闭数据库
MySQL中:
systemctl start mysqld; -- 启动MySQL systemctl stop mysqld; -- 停止MySQL
-
查看数据库版本
Oracle中:SELECT * FROM v$version;
MySQL中:
SELECT VERSION();
-
清空表数据
TRUNCATE TABLE table_name; -- 保留表结构,删除数据 DELETE FROM table_name; -- 可回滚,逐条删除
相关问答FAQs
Q1: 如何查看Oracle数据库中某个表的存储空间使用情况?
A1: 可以通过查询dba_tables和dba_segments视图获取表的存储信息,
SELECT table_name, ROUND(bytes/1024/1024, 2) AS size_mb FROM dba_segments WHERE segment_name = 'TABLE_NAME' AND owner = 'SCHEMA_NAME';
也可使用ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS;更新统计信息后查询dba_tables的num_rows和avg_row_len估算存储空间。
Q2: MySQL数据库中如何忘记root密码后的重置步骤?
A2: 重置MySQL root密码的步骤如下:
- 停止MySQL服务:
systemctl stop mysqld; - 跳过权限表启动MySQL:
mysqld_safe --skip-grant-tables &; - 无密码登录MySQL:
mysql -u root; - 执行更新密码命令:
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES; - 重启MySQL服务:
systemctl restart mysqld,使用新密码登录。
