Oracle维护笔记
·常用的数据字典视图——
select * from v$parameter; --查看系统参数
select * from v$version; --查看Oracle的版本
select * from v$session; --查看当前Session
select * from v$statname;
select name,log_mode from v$database; -- 查看归档模式
Oracle中有一些常用的视图:
ALL_开头,USER_开头,DBA_开头,V_$开头(这个跟V$开头是一样的,因为后者是前者的同义词)。
查看重做日志文件:
select a.member,b.status from v$logfile a ,v$log b where a.group#=b.group#;
·常用系统变量的设置——
SQL> set timing on
SQL> set autotrace traceonly
SQL> set linesize 1000
·常用的imp/exp,impdp/expdp ——
--expdp/impdp--
expdp aidm32/aidm32 dumpfile=dp_et_src_devinfo.dmp tables=et_src_devinfo PARALLEL=4 CONTENT=DATA_ONLY
impdp aidm32/aidm32 dumpfile=dp_et_src_devinfo.dmp tables=et_src_devinfo PARALLEL=4 CONTENT=DATA_ONLY
--imp/exp--
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
--
exp AIDMCU/AIDMCU FILE="USER_INFO.dmp" TABLES='USER_INFO' INDEXES=N TRIGGERS=N CONSTRAINTS=N GRANTS=N BUFFER=10240000
--
imp FROMUSER=aidmcu TOUSER=aidmcu INDEXES=N IGNORE=Y CONSTRAINTS=N GRANTS=N BUFFER=10240000 FILE="OP_DOMAIN.dmp"
·查看表空间大小——
--当前表空间大小
select sum(bytes) from dba_data_files where tablespace_name=$TABLESPACE_NAME
--已使用的表空间大小
select sum(bytes) from dba_segments where tablespace_name=$TABLESPACE_NAME;
--未使用空间大小
select sum(bytes) from dba_free_space where tablespace_name=$TABLESPACE_NAME;
·更改表空间——
--ADD DATAFILE
Alter tablespace AIDM_OTHER_IDX ADD DATAFILE '/data1/aidmcu/oracle10_data/AIDM_OTHER_IDX_03.dbf' size 2000m Autoextend on next 100m maxsize 10000M;
alter tablespace AIDM_OTHER_IDX OFFLINE;
--RENAME DATAFILE
alter tablespace AIDM_OTHER_IDX RENAME DATAFILE '/data1/aidmcu/oracle10_data/AIDM_OTHER_IDX_04.dbf' to '/data1/aidmcu/oracle10_data/dmcu15/AIDM_OTHER_IDX_04.dbf';
alter tablespace AIDM_OTHER_IDX ONLINE;
--删除表空间、用户
drop tablespace aidmcucc_tmp including contents and datafiles;
drop user aidmcucc cascade;
·查看SQL语句的执行性能——
select length(cpu_time)
,to_char(cpu_time)
,to_char(round(cpu_time/case when executions=0 then 1 else executions end,3))
,to_char(round(DISK_READS/case when executions=0 then 1 else executions end,3)) as DISK_READS1
,to_char(round(BUFFER_GETS/case when executions=0 then 1 else executions end,3)) as BUFFER_GETS1
,to_char(round(DISK_READS/case when BUFFER_GETS=0 then 1 else BUFFER_GETS end,3)) as DISK_READS_BUFFER_GETS
,to_char(executions) as executions
,to_char(elapsed_time) as elapsed_time
,to_char(DISK_READS) as DISK_READS,to_char(DIRECT_WRITES) as DIRECT_WRITES,to_char(BUFFER_GETS) as BUFFER_GETS
,sql_text from
(select * from v$sqlarea where parsing_schema_name='AIDMCU'
order by cpu_time desc)
where rownum<=6;
·查看正在运行的job——
-- 2. 查询是否有job正在执行!
select * from dba_jobs_running;
-- 1. 查看job ID
select job,log_user,what from user_jobs where what = 'merge_ud_pair;';
·查看用户权限
--本用户读取其他用户对象的权限:
select * from user_tab_privs;
--本用户所拥有的系统权限:
select * from user_sys_privs;
-- 授予用户帐户的角色
select * from user_role_privs;
·查看数据库字符和修改数据库字符集
DB字符集对varchar的字段类型有影响(但对nvarchar2类型没有影响,nvarchar类型是计算字符的,mysql也是)。
若DB字符集是ZHS16GBK,则汉字占用2字节;若DB字符集是AL32UTF8,则汉字占用三字节!
但ASCII码都是占用单字节!
select userenv('language') from dual;
-- 跟select SYS_CONTEXT ('USERENV', 'DB_NAME') from dual; 是类似的。或者
select * from v$nls_parameters ;
结果如下:
PARAMETER VALUE
1 NLS_LANGUAGE SIMPLIFIED CHINESE
2 NLS_TERRITORY CHINA
3 NLS_CURRENCY RMB
4 NLS_ISO_CURRENCY CHINA
5 NLS_NUMERIC_CHARACTERS .,
6 NLS_CALENDAR GREGORIAN
7 NLS_DATE_FORMAT DD-MON-RR
8 NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
9 NLS_CHARACTERSET ZHS16GBK
10 NLS_SORT BINARY
11 NLS_TIME_FORMAT HH.MI.SSXFF AM
12 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
13 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
15 NLS_DUAL_CURRENCY RMB
16 NLS_NCHAR_CHARACTERSET AL16UTF16
17 NLS_COMP BINARY
18 NLS_LENGTH_SEMANTICS BYTE
19 NLS_NCHAR_CONV_EXCP FALSE
·修改DB字符集的方法如下————
更改前:ORACLE10g更改前数据库SERVER字符集为:ZHS16GBK
更改为:AL32UTF8
更改步骤:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8; //跳过超子集检测
SQL>ALTER DATABASE national CHARACTER SET INTERNAL AL32UTF8;
这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
更改结果:存在于数据库中的汉字编码仍然是2字节方式存储,新的输入的汉字将是3字节方式存储。
查看方式: SQL>select lengthb('你好') from dual;
·查看Oracle的系统选项或参数:
·show parameter 相等于 show parameters
* 可以通过show parameter 来显示所有的参数名/值。
* 查询 show parameter 跟查询select * from v$parameter是一样的。
-- 查询SGA
show parameter sga;
-- 查询实例名
show parameter instance_name;
·select * from v$option
* 例如 "Advanced replication"="TRUE",则表示支持高级复制。
·alter命令——
alter database ... ; -- 例如 alter database mount;
alter table ... ;
alter user ... ;
alter system ... ;
alter tablespace ... ;
alter session ... ;
·show命令——
-- 常用的show命令有:
show paramaters
show sga
show all
show spool
show user
--其他请参照 help show.
·SGA的调整——
-- 查询SGA
show parameters sga;
-- 设置,然后重启
show * from v$version;
alter system set sga_max_size=1300M scope=spfile;
·Oracle的备份和恢复——
RMAN——Recovery Manager
·锁、REDO、UNDO——
阻塞
导致行级锁 阻塞的情况:
1. 对有约束的列,两个会话插入同样值的行记录。
2. 两个会话更新相同的一行。
TX(行级锁)锁、TM(表级锁)锁、DDL锁
redo (重做信息)是 Oracle 在在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来 “ 重放 ” (或重做)事 务 。
undo (撤销信息)是 Oracle 在 undo 段中记录的信息,用于取消或回滚事务。
重做日志文件( redo log file )对 Oracle 数据库来说至关重要。它们是数据库的事务日志。 Oracle
维护着两类重做日志文件:在线( online )重做日志文件和归档( archived )重做日志文件。这两类重做日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们就能派上用场。
“ 回滚段 ” ( rollback segment )和 “ undo 段 “ ( undo segment )是一样的。UNDO时,数据库只是逻辑地恢复到原来的样子。
REDO 是在*.log文件中。UNDO 是在DBF文件中;他存储在一组特殊的段中,称为undo segment.