Oracle常用命令,DBA的基础操作,Oracle运维基础操作

用户

sys 和system都是系统管理员(DBA),拥有最大的权限,密码是安装时设置的;
scott是普通用户,拥有一些用于学习的表,初始密码是tiger。

内置角色

角色是权限的集合,以下是三个内置角色:

sysdba 数据库管理员,拥有最多权限,包括:打开和关闭备份和恢复数据库日志管理、会话管理、创建数据库用户管理等。
sysoper 数据库操作员,包括权限:打开和关闭备份和恢复数据库日志会话
normal 普通用户,只有查询表的权限。

启停Oracle✨

监听 开启实例(sqlplus)
关闭实例(sqlplus) 关闭监听

#启动
su - oracle
lsnrctl start
sqlplus / as sysdba
startup

#停止
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE
[oracle@localhost ~]$ lsnrctl stop
#可以通过lsnrctl status命令查看Oracle监听器运行状况
[oracle@localhost ~]$ lsnrctl status

#查看版本
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 1 23:29:19 2017
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

#以SYS用户身份登录Oracle
SQL> conn /as sysdba
Connected to an idle instance.

远程登入oracle

sqlplus 用户名/密码@ip:端口号/实例名

sqlplus oracle/123456@192.168.2.1:1521/db_test

常用sql

表空间

查看创建表空间的语句

SELECT dbms_lob.substr(DBMS_METADATA.GET_DDL('TABLESPACE', 表空间名字.tablespace_name))FROM DBA_TABLESPACES 表空间名字;

查看用户属于哪个表空间

select username,default_tablespace from dba_users  where username='db_test';

select * from user_users;		#查看当前用户使用的表空间
SELECT * FROM DBA_USERS;		#查看所有用户对应的表空间

查看表空间文件的位置

select file_name from dba_data_files;

查看DATA_PUMP_DIR路径

select * from dba_directories;

查看表空间

select * from dba_tablespaces where tablespace_name = '表空间名字(大写)';

select * from Dba_Tablespaces;	#查看所有表空间

select   tablespace_name,table_name  from user_tables WHERE tablespace_name='表空间名称';	#查询表空间下的表

select TABLESPACE_NAME from dba_tablespaces;    #列出表空间

创建表空间

#test为表空间名字,100m代表初始大小,autoextend on表示自动扩展
create tablespace test datafile '/u01/app/oradata/test/test.dbf' size 500m autoextend on;

#创建新的表空间文件,解决表空间满的问题
ALTER TABLESPACE 表空间名字 ADD DATAFILE '/app/oracle/oradata/test/test2.dbf' SIZE 200M AUTOEXTEND ON NEXT 50M MAXSIZE 31G;

删除表空间

drop tablespace 表空间名字 including contents and datafiles CASCADE CONSTRAINTS;		#删除非空表空间,包含物理文件

查看表空间物理文件的名称及大小

select
tablespace_name,
file_id, file_name,
round(bytes/(1024*1024),0) total_space
from
dba_data_files
order by tablespace_name;

给用户授权能访问表空间

ALTER USER 用户名 QUOTA UNLIMITED ON 表空间名;

用户管理

创建用户

#创建用户db_test,密码为并关联TEST表空间
create user db_test identified by 123456 default tablespace TEST;

查询用户

select * from all_users where USERNAME='用户名(大写)';		#查询指定用户
select * from all_users;		#查看所有用户
select username from dba_users;	#查看所有用户
select * from user_users; 		#查看当前用户
show user; 						#显示当前用户名

切换用户

alter session set current_schema=db_test;	#切换到db_test用户

授权

获取批量取消普通用户dba权限的命令

select 'revoke dba from '||USER_INFO.grantee||';' from dba_role_privs USER_INFO where granted_role='DBA' and admin_option='NO';

角色✨

grant connect, resource to db_test;        #给db_test用户授予连接权限
grant read,write on directory DATA_PUMP_DIR to db_test;    #给db_test用户添加对DATA_PUMP_DIR的读写权限
grant dba to db_test;		#授予dba权限
grant exp_full_database to 用户名;	#授予导出权限

解锁用户

alter user 用户名 account unlock;	#解锁用户

删除用户

select sid,serial#,username from v$session;		#查询所有用户的会话连接
select sid,serial# from v$session where username='用户名(大写)';		#查看指定用户的会话信息
alter system kill session '12,235';			#kill会话信息

drop user db_test cascade;		#删除db_test用户
drop user "db_test" cascade;	#如果查出来的用户名是小写,则需要加双引号,忽略大小写

创建只读角色 - 创建只读用户(所有表可访问)✨

创建用户
> CREATE  USER 用户名 IDENTIFIED BY 密码;

创建只读的角色名称
> CREATE ROLE READER_ROLE;   --READER_ROLE 自定义的角色名称

给角色分配权限
> grant SELECT ANY DICTIONARY to READER_ROLE; 
> grant SELECT ANY TABLE to READER_ROLE; 
> grant SELECT ANY TRANSACTION to READER_ROLE; 
> grant SELECT ANY SEQUENCE to READER_ROLE; 

将只读角色赋予指定账户
> grant READER_ROLE to 用户名;

给用户赋予连接权限
> grant connect, resource to 用户名;
> grant create session to 用户名;

修改密码

sqlplus / as sysdba
alter user system identified by 新密码;

实例✨

select status from v$instance;			#查看实例的状态
select instance_name from v$instance;	#查看实例名

查看创建表的sql语句

SELECT DBMS_METADATA.GET_DDL('TABLE','表名')FROM DUAL;

查看清理日志表的sql语句

echo "SELECT 'TRUNCATE TABLE '||TABLE_NAME||';' FROM USER_TABLES WHERE TABLE_NAME LIKE '%LOG%';" | sqlplus 用户名/密码@ip:端口/服务名

删除以日期结尾的日志表

SELECT 'DROP TABLE '||TABLE_NAME||';' FROM DBA_TABLES WHERE REGEXP_LIKE(TABLE_NAME,'.*_LOG_.*\d+') AND OWNER='${DB_USER}'

按条件删除表中数据

DELETE  FROM 表名 WHERE 条件;

查看表

select table_name from user_tables;		#列出所有的表
select * from user_tables;		#查看当前用户的表
#查看用户db_user下是否有flyway_schema_history表
SELECT COUNT(*) FROM ALL_TABLES 
WHERE OWNER = UPPER('db_user') AND TABLE_NAME = UPPER('flyway_schema_history')

flyway按版本排序

SELECT * FROM "schema_version"  order by "version" desc;

数据库

查看

select name from v$database;	#查看数据库名
select * from v$version;		#查看数据库版本

查看及修改字符集

查看字符集

sqlplus / as sysdba
SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
# 修改字符集
 ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

导入导出

只导出表结构,不导出数据

expdp  用户名/密码@服务名 \
      DIRECTORY=DATA_PUMP_DIR \
      exclude=PROCEDURE,FUNCTION,STATISTICS \
      DUMPFILE=导出后的文件名 \
      content=metadata_only \
      tables=1,2 \
      compression=all

    或者
    
#rows=n代表不要数据行
expdp 用户名/密码@服务名 DIRECTORY=DATA_PUMP_DIR \
DUMPFILE=导出后的文件名 \
rows=n compression=all

非交互获取DATA_PUMP_DIR路径

echo "select dd.DIRECTORY_PATH from dba_directories dd WHERE dd.DIRECTORY_NAME = 'DATA_PUMP_DIR';" | sqlplus system/123456@192.168.1.2/orcl | grep -A2 'DIRECTORY_PATH' | sed -n '$p'

备份单张表✨

#格式:
expdp 用户名/密码@orcl DIRECTORY=DATA_PUMP_DIR \
tables=表空间名.表名 \
DUMPFILE=备份文件名 \
exclude=PROCEDURE,FUNCTION,STATISTICS \
compression=all

#示例:
expdp test_user/test_user@orcl DIRECTORY=DATA_PUMP_DIR \
tables=test_user.abc \
DUMPFILE=test_user.dmp \
exclude=PROCEDURE,FUNCTION,STATISTICS \
compression=all

如果导出多张表,可以这么写:

tables=(表空间名1.表名1,表空间名2.表名2)

导入单张表✨

impdp 用户名/密码@orcl directory=DATA_PUMP_DIR dumpfile=备份文件名 full=y logfile=日志文件名

实战✨

Oracle 19创建表空间和用户

show pdbs;		#查看所有容器
alter session set container=PDB1;	#切换到PDB1容器
select file_name from dba_data_files;	#查看表空间文件的位置
create tablespace test datafile '/u01/app/oradata/test/test.dbf' size 200m autoextend on NEXT 50M MAXSIZE 31G;

create user 用户名 identified by 密码 default tablespace 表空间名;
grant connect, resource,IMP_FULL_DATABASE  to 用户名;
grant read,write on directory DATA_PUMP_DIR to 用户名;
ALTER USER 用户名 QUOTA UNLIMITED ON 表空间名;	#给用户授权能访问表空间

Oracle 19还原库

impdp 导入的用户名/密码@ip:port/pdb名 schemas=导出的用户名 \
directory=DATA_PUMP_DIR dumpfile=导入的dmp文件名 \
remap_schema=导出的用户名:导入的用户名 \
REMAP_TABLESPACE=导出的表空间:导入的表空间 \
EXCLUDE=STATISTICS TRANSFORM=segment_attributes:n \
table_exists_action=replace \
logfile=日志文件名
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gary jie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值