Oracle日常维护语句
ドラゴンボールのLong Lv4

常用语句

数据库启停

监听启停

1
2
3
4
5
6
7
8
9
10
su - oracle

--查看监听器命令
lsnrctl status

--监听器启动
lsnrctl start

--监听器停⽌
lsnrctl stop

库启停

1
2
3
4
5
sqlplus / as sysdba
#启动库
SQL>startup
#关闭库
SQL>shutdown immediate

oracle查看实例名

1
2
3
4
5
select name,dbid from v$database;
--或者
show parameter db_name;
--查看 pfile 文件位置
show parameter pfile;

查看 oracle版本

1
SQL> select * from v$version;

查询内存分配情况

1
SQL> select * from v$sga;

查看并发连接数

1
SQL> select count(*) from v$session where status='ACTIVE';

日志文件

1
SQL> select * from v$logfile;

查看控制文件

1
SQL> select name from v$controlfile;

查看、管理 ORACLE 表

查看所有 segment 的大小

1
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name;

查询用户下的表

1
SELECT table_name FROM  all_tables;

查看某个表属于哪个表空间

1
SQL> select tablespace_name from all_tables where table_name='SYS_EXPORT_FULL_01';

创建表时指定表空间

1
SQL>create table a (name varchar(10)) tablespace test;

查看数据库表结构

1
SQL> desc 表名;

查看表的索引

1
SQL>select index_name,index_type,table_name from user_indexes where table_name='表名';

查看用户序列

1
SQL> select sequence_name from USER_SEQUENCES;

查看用户触发器

1
2
3
4
5
6
SQL> select * from user_triggers where table_name = upper('job');

--通过group by 语句使用rollup运算符汇总ID列

SQL> select ID,avg(age),sum(age),max(age),count(*)
2 from job group by rollup(ID);

修改表的列名

1
SQL> alter table 表名 rename column 列名 to 新列名;

修改表的列的字符大小

1
SQL> alter table student modify class varchar2(10);

创建主键

1
SQL> alter table 表名 add constraint 主键名 primary key(列名);

查询表空间使用情况

表空间总体情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
  D.TOT_GROOTTE_MB "表空间大小(G)",
  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(G)",
  --TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2)) || '%' "使用比",
  F.TOTAL_BYTES "空闲空间(G)",
  F.MAX_BYTES "最大块(G)"
--,E.file_name "存储位置"
  FROM (SELECT TABLESPACE_NAME,
  ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 2) TOTAL_BYTES,
  ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 2) MAX_BYTES
  FROM SYS.DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F,
  (SELECT DD.TABLESPACE_NAME,
   ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 2) TOT_GROOTTE_MB
  FROM SYS.DBA_DATA_FILES DD
  GROUP BY DD.TABLESPACE_NAME) D,
SYS.DBA_DATA_FILES E
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
  ORDER BY 1;

查询表空间的总容量

1
2
3
select tablespace_name, sum(bytes) / 1024 / 1024 /1024 as "大小(GB)"
  from dba_data_files
  group by tablespace_name;

查询表空间使用率

1
2
3
4
5
6
7
8
9
10
11
select total.tablespace_name,
  round(total.MB, 2) as Total_MB,
  round(total.MB - free.MB, 2) as Used_MB,
  round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
  from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
  from dba_free_space
  group by tablespace_name) free,
  (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
  from dba_data_files
  group by tablespace_name) total
  where free.tablespace_name = total.tablespace_name;

监控当前数据库谁在运行什么SQL语句

1
2
3
select osuser, username, sql_text  
from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;

找使用CPU多的用户session

1
2
3
4
5
6
select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value 
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and
c.sid=a.sid and
a.paddr=b.addr
order by value desc;

等待最多的用户

1
2
3
4
5
6
SELECT   s.SID, s.username, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$session s
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880
AND SYSDATE
GROUP BY s.SID, s.username
ORDER BY total_wait_time DESC;

等待最多的SQL

1
2
3
4
5
6
7
SELECT   a.program, a.session_id, a.user_id, d.username, s.sql_text,
SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$sqlarea s, dba_users d
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.sql_id = s.sql_id
AND a.user_id = d.user_id
GROUP BY a.program, a.session_id, a.user_id, s.sql_text, d.username;

查看消耗资源最多的SQL

1
2
3
4
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC;

查看某条SQL语句的资源消耗

1
2
3
4
查看某条SQL语句的资源消耗
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498 AND address = hextoraw('CBD8E4B0');

查询会话执行的实际SQL

1
2
3
4
5
6
SELECT   a.SID, a.username, s.sql_text
FROM v$session a, v$sqltext s
WHERE a.sql_address = s.address
AND a.sql_hash_value = s.hash_value
AND a.status = 'ACTIVE'
ORDER BY a.username, a.SID, s.piece;

查看死锁信息

1
2
3
4
5
6
7
8
SELECT (SELECT username
FROM v$session
WHERE SID = a.SID) blocker, a.SID, 'is blocking',
(SELECT username
FROM v$session
WHERE SID = b.SID) blockee, b.SID
FROM v$lock a, v$lock b
WHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;

显示正在等待锁的所有会话

1
SELECT * FROM DBA_WAITERS;

oracle配置查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
select 
SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','ENTRYID') entryid,
SYS_CONTEXT('USERENV','ISDBA') isdba,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
SYS_CONTEXT('USERENV','DB_NAME') db_name,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol,
SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,
SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type,
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data
from dual;

切换字符集

1
2
#查看oracle数据库的字符集
SQL> select userenv('language') from dual;

查看oracle数据库的编码

1
2
3
4
SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
[oracledb@ ~]$ set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #windows_os
[oracledb@ ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #linux_os

查询当前oracle的并发连接数

1
SQL> select count(*) from v$session where status='ACTIVE';

查看不同用户的连接数:

1
SQL> select username,count(username) from v$session where username is not null group by username;

查看所有用户:

1
select * from all_users;

当前的连接数

1
select count(*) from v$process;

查询当前连接会话数

1
2
3
4
5
6
7
8
select s.value,s.sid,a.username
from
v$sesstat S,v$statname N,v$session A
where
n.statistic#=s.statistic# and
name='session pga memory'
and s.sid=a.sid
order by s.value;

清除用户下连接进程

1
2
3
4
5
6
7
8
9
10
11
SQL> alter system kill session '204,4609';

SQL> alter system kill session '399,5841';

SQL> alter system kill session '590,6041';

修改processes和sessions值
  SQL> alter system set processes=300 scope=spfile;
  系统已更改。
  SQL> alter system set sessions=335 scope=spfile;
  系统已更改。

修改processes和sessions值必须重启oracle服务器才能生效
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:
  sessions=(1.1*process+5)   

数据库允许的最大连接数

1
select value from v$parameter where name = 'processes';

查看数据库现有模式、是否归档

1
SQl>select name,log_mode from v$database;

也可以用下面的语句

1
archive log list;--(该方法需要as sysdba)

查看数据库的创建日期和归档方式

1
SQL> Select Created, Log_Mode, Log_Mode From V$Database;

配置用户密码过期时间

1
2
alter profile "default" limit password_life_time unlimited; --配置用户密码永不过期
alter profile "default" limit password_life_time 100; --配置用户密码100天过期

expdp与impdp

整库导出命令

1
exp system/itcast full=y 或者 exp system/itcast file=文件名 full=y

整库导入命令

1
imp system/itcast full=y or imp system/itcast full=y file=water.dmp

按用户导出与导入

按用户导出

1
exp system/itcast owner=wateruser file=wateruser.dmp

按用户导入

1
imp system/itcast file=wateruser.dmp fromuser=wateruser

按表导出与导入

按表导出

1
exp wateruser/itcast file=a.dmp tables=t_account,a_area

按表导入

1
imp wateruser/itcast file=a.dmp tables=t_account,a_are

如何正确终止expdp与impdp任务,操作步骤如下:

步骤1

查看视图dba_datapump_jobs

1
select job_name,state from dba_datapump_jobs;

步骤2

正确停止expdp导出任务使用stop_job

1
expdp USERNAME/USERPASSWORD@SIDNAME attach=SYS_EXPORT_SCHEMA_02

步骤3

停止任务

1
2
Export> stop_job=immediate 
Are you sure you wish to stop this job ([yes]/no): yes

步骤4

查看系统中的备份job状态

1
select owner_name,job_name ,state from dba_datapump_jobs;
1
2
3
4
5
6
7
8
9
10
11
#扩展:下列命令在交互模式下有效:
HELP: 总结交互命令。
KILL_JOB: 分离和删除作业。
PARALLEL: 更改当前作业的活动 worker 的数目。
PARALLEL=.2
START_JOB: 启动/恢复当前作业。
START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业停止时执行的任意操作。
STATUS :在默认值(0)将显示可用时的新状态的情况下,要监视的频率(以秒计)作业状态。
STATUS[=interval]
STOP_JOB: 顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭数据泵作业。

创建、管理 Oracle 表空间

先查询空闲空间

1
select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space;

增加 Oracle 表空间

1
2
3
4
5
6
7
--先查询数据文件名称、大小和路径的信息,语句如下:
select tablespace_name,file_id,bytes,file_name from dba_data_files;

--修改文件大小语句如下
alter database datafile
'需要增加的数据文件路径,即上面查询出来的路径
'resize 800M;

创建 Oracle 表空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
create tablespace test
datafile '/home/app/oracle/oradata/oracle8i/test01.dbf' size 8M
autoextend on
next 5M
maxsize 10M;

create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize unlimited
maxsize unlimited 是大小不受限制

create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local uniform;
unform表示区的大小相同,默认为1M

create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local uniform size 500K;
unform size 500K表示区的大小相同,为500K

create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local autoallocate;
--autoallocate表示区的大小由随表的大小自动动态改变,大表使用大区小表使用小区

create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
temporary;
--temporary创建字典管理临时表空间 ,要创建本地管理临时表空间要加temporary tablespace关键字

create temporary tablespace sales
tempfile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
--创建本地管理临时表空间,如果是临时表空间,所有语句中的datafile都换为tempfile ,所有语句中的datafile都换为tempfile8i

--为表空间增加数据文件:
alter tablespace sales add
datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' size 800M
autoextend on next 50M
maxsize 1000M;

查看表空间是否自动扩展

1
SQL> select file_id,file_name,tablespace_name,autoextensible,increment_by from dba_data_files order by file_id desc;

更改自动扩展属性:

1
2
3
4
5
alter database datafile
'/home/app/oracle/oradata/oracle8i/sales01.dbf',
'/home/app/oracle/oradata/oracle8i/sales02.dbf'
'/home/app/oracle/oradata/oracle8i/sales01.dbf
autoextend off

表空间的查看与修改

查看用户默认表空间

1
2
3
SQL> select username,default_tablespace from dba_users;查看所有用户的默认表空间

SQL> select username,default_tablespace from user_users;查看某个用户的默认表空间,前提需要connect该用户。
1
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = 'hr'; 查看用户对应的默认表空间

修改用户默认表空间

1
SQL> alter user zhanghr default tablespace test;

设置数据库的默认临时表空间

SQL>Alter database default temporary tablespace temp_tbs_name;

查看用户和默认表空间的关系

1
SQL>select username,default_tablespace from dba_users;

查看临时表空间

1
2
3
SQL> select file_name,file_id,blocks,user_blocks from dba_temp_files;

SQL> select tablespace_name,current_users,total_blocks,used_blocks,free_blocks from v$sort_segment;

查看 undo 表空间

1
2
3
4
5
6
7
8
SQL> show parameter undo;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1

查看 undo 表空间大小

1
SQL> select sum(bytes)/1024/1024 "current undo size(M)" from dba_data_files where tablespace_name='UNDOTBS1';

通过增加数据文件来改变 undo 表空间大小

1
2
3
4
5
SQL> alter tablespace undotbs1
add datafile '/oracle/oradata/orc6/undo02.dbf' size 10M;
复制代码
2.6.10 通过 resize 更改数据文件大小
SQL> alter database datafile '/oracle/oradata/orc6/undo02.dbf' resize 100M;

查看某个表空间的数据文件

1
SQL> select file_name,tablespace_name,bytes/1024/1024 "bytes MB",maxbytes/1024/1024 "maxbytes MB" from dba_data_files where tablespace_name='ORA1TBS';指定表空间名要大写

查看所有表空间大小

1
2
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files
group by tablespace_name;

查看已使用的表空间大小

1
2
3
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
group by tablespace_name;

清理(还原时出错,清用户表空间)

1、删除数据表空间:

1
2
#执行语句:
[oracledb@ ~]$ sqlplus / as sysdbaSQL> drop tablespace mepro_data including contents and datafiles cascade constraint;

2、删除临时表空间:

1
2
3
#执行语句:

SQL> drop tablespace mepro_temp including contents and datafiles cascade constraints;

3、删除用户:

1
2
#执行语句:
SQL> drop user srmhdld cascade;

4、报用户正在连接,无法删除的解决方法

1
2
3
4
5
6
7
8
9
10
11
12
---方法1:重启并迅速执行drop user语句(个人推荐)
SQL> shutdown immediate;
SQL> startup

--方法2:删除正在连接的session(连接的session连接着很多时,清理耗时,没有方法1快速)

#查询用户会话
SQL> select username,serial#,sid,program,machine,status from v$session where username='USERNAME' AND STATUS='ACTIVE';
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

---删除相关用户会话
SQL> alter system kill session 'serial#, sid';

查看、管理 ORACLE 数据文件

查看数据文件

1
SQL> select name from v$datafile;

更改数据文件大小

1
SQL> alter database datafile '/oradata2/hisvhfs/undotbs01.dbf' resize 30G;

查看用户所有表空间及对应的数据文件和数据文件大小

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

查看数据文件状态及大小

1
SQL> select name,BYTES,STATUS ,FILE# from v$datafile;

创建、配置新用户及查看用户属性

解锁新用户:

1
2
SQL> alter user scott account unlock;
SQL> alter user scott identified by tiger;

删除oracle用户:

1
SQL>drop user username cascade; (删除与用户相关的所有对象)

这样该用户包括该用户下的表,试图,同义词,过程,索引,及相关的一切就删除了。

创建用户并赋权限以及设置默认表空间。

以sysdba用户登陆进行以下设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
-- Create the user
create user VHFSM
identified by vhnj1fsm
default tablespace MGRVHFSTBSDEF 此处是设置默认表空间。
temporary tablespace TEMP
profile DEFAULT
quota unlimited on mgrvhfstbs2010 此处是设置可操作的其他表空间
quota unlimited on mgrvhfstbsdef;
-- Grant/Revoke role privileges
grant connect to VHFSM;
grant dba to VHFSM;
-- Grant/Revoke system privileges
grant unlimited tablespace to VHFSM;

查看用户及角色权限

1.查看所有用户:

1
2
3
select * from dba_users;
select * from all_users;
select * from user_users;

2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):

1
2
select * from dba_sys_privs;
select * from user_sys_privs;

3.查看角色(只能查看登陆用户拥有的角色)所包含的权限

1
sql>select * from role_sys_privs;

4.查看用户对象权限:

1
2
3
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;

5.查看所有角色:

1
select * from dba_roles;

6.查看用户或角色所拥有的角色:

1
2
select * from dba_role_privs;
select * from user_role_privs;

7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select * from V$PWFILE_USERS

--注意:
--1、以下语句可以查看Oracle提供的系统权限

select name from sys.system_privilege_map

--2、查看一个用户的所有系统权限(包含角色的系统权限)

SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'DATAUSER'
UNION
SELECT privilege
FROM dba_sys_privs
WHERE grantee IN (SELECT granted_role FROM dba_role_privs WHERE grantee = 'DATAUSER');

数据库游标设置

1
2
3
4
SQL> show parameter open_cursors; 查看游标参数
SQL> select count(*) from v$open_cursor; 查看打开的游标
SQL> select name,value from v$sysstat where name ='opened cursors current';查看当前打开的游标
SQL> alter system set open_cursors=3000 scope=both; 修改默认游标数

查看、配置 ORACLE 重做日志

创建日志文件组

1
2
3
4
5
SQL> alter database add logfile group 4
(
'/oracle/oradata/orc6/redo04.log'
)
size 10M;

查看日志文件组

1
SQL> select group#,status,member from v$logfile;

为日志文件组增加日志文件

1
SQL> alter database add logfile member '/oracle/oradata/orc6/redo05.log' to group 3;

查看日志文件大小

1
SQL> select GROUP#,BYTES,BLOCKSIZE,MEMBERS from v$log;

desc 的常用查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SQL> desc dba_temp_files; 查询临时表空间
SQL> desc v$database; 查看数据库
SQL> desc dba_data_files; 查看数据文件
SQL> desc user_segments; 查看oracle segment(段)
SQL> desc dba_segments; 查看ORACLE segment
SQL> desc dba_tables; 查看表
SQL> desc dba_objects 查看对象
SQL> desc dba_users; 查看用户
SQL> desc dba_tablespaces; 查看表空间
SQL> desc user_segments; 查看数据段
SQL> desc dba_jobs; 查看job
SQL> desc dba_role_privs; 查看角色权限
SQL> desc dba_constraints 查看约束
SQL> desc dba_cons_columns 查看列约束
SQL> show parameter log_archive_dest; 查看archive log所在位置
SQL> archive log list; 查看归档目录以及log sequence
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; 查看flash_recovery_area 使用情况。
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; 计算flash_recovery_area已经占用的空间。
SQL> show parameter recover; 查找recovery目录
SQL> desc v$process 通过v$process视图,我们获的是当前系统中所有进程信息,包括“后台进程”,也包括“服务器进程”。
SQL> select addr, program from v$process;
SQL> desc v$bgprocess 通过v$bgprocess视图,我们获得当前系统中启动的Oracle“后台进程”信息
SQL> select paddr, name from v$bgprocess where paddr<>'00';
通过v$bgprocess.paddr与v$process.addr关联起来的,关联后查询结果显而易见只会有Oracle“后台进程”的信息
SQL> select a.paddr, a.name, a.description from v$bgprocess a, v$process b where a.paddr=b.addr;

查看 ASM 磁盘组信息

1
2
3
SQL> desc v$asm_disk;

SQL> desc v$asm_diskgroup;

扩展知识

1)扩展1:

情况1、高版本往低版本导出还原时,如12往11还原时,在12c执行导出时,添加低版本的版本号version=11.1.0.2.0

1
2
3
#格式:

[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=XXX.dmp DIRECTORY=dir_dump version=11.1.0.2.0

情况2、低版本往高版本还原时,高版本一般兼容低版本,目前个人运维工作中11往12还原没遇到什么问题。

2)扩展2:

(1)、按指定大小备份,如每份5G大小(parallel是多线程处理,线程数要小于生成文件个数,线程要小于 cpu 线程数)

1
2
3
#备份格式

[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=expdpXXX.log filesize=5G parallel=16

(2)、多个备份文件还原:

1
2
3
#还原格式

[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=impdpXXX.log parallel=16

3)扩展3导出过滤不导出某张表:

1
2
3
#格式

[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp exclude=TABLE:\"IN \'TABLENAME\'\"

4)扩展4不同库还原时不改变数据结构使用truncate参数:

1
2
#格式
[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp remap_schema=源SCHEMASNAME:目标SCHEMASNAME remap_tablespace=源_data:目标_data TABLE_EXISTS_ACTION=truncate

5)扩展5导出备份时保留表,清除表数据(query参数):

1
2
#格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"',........

6)扩展6导出备份时保留表,清除表数据,同时过滤某两张表

1
2
#格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"' exclude=TABLE:\"IN \'TABLENAME1\'\'TABLENAME2\'\"

7)扩展7仅统计数据库各表数据,但不导出,参数estimate_only=y

1
2
#格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump estimate_only=y
  • 本文标题:Oracle日常维护语句
  • 本文作者:ドラゴンボールのLong
  • 创建时间:2020-01-06 21:10:12
  • 本文链接:https://zhongshenglong.xyz/2020/01/06/oracle日常维护语句/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论