(本文为本人自学oracle,读完DBA高效入职指南一书所记录的学习笔记,仅作为自己日后参考查询使用。)

------------------------------------------------------------------------------------------------------------------------------------------------------

==================================================================================================
Oracle的物理结构主要有三种文件。
.dbf数据文件,是用于存储数据库数据的文件,例如表中的记录,索引,数据字典信息等,可以通过系统数据字典DBA_DATA_FILES查看相关信息。与逻辑角度的表空间(并不是真正的文件)对应,一个表空间可以有多个数据文件,但一个数据文件只能属于一个表空间。

.log重做日志文件,用于记录对数据库的修改信息(查询操作不会产生)。日志文件是备份与恢复的重要手段。

.ctl控制文件,用于描述数据库的物理结构。存放有数据文件和日志文件等信息。

.ora参数文件,记录数据库名,控制文件路径、进程等信息。

上面三种文件任意一种出错,数据库都可能不能正常运行。参数文件可以修改数据库某些参数,但是需要重启数据库才生效。

======================================================
查询oracle是否正常开启
select status from v$instance;
open

动态表输入字典表
动态表不能更改数据,表名一般由v$开头

================================================
sqlplus 中关闭数据库
shutdown immediate;

启动数据库
startup

====================================
显示登录的用户名  show user;
显示登录的数据库名称  show parameter db_name;

show parameter 可以显示数据库的各种信息

=========================================================

oracle 中安装的默认的用户scott 密码tiger

查询数据中一个用户的状态
数据库中的数据字典  dba_users中有所有用户的相关信息
例:   select username,account_status from dba_users where username='SCOTT';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT                          EXPIRED & LOCKED

证明这个用户被锁住了

对用户进行解锁:
alter user scott account unlock;

解锁后账户为到期状态,用原密码登录会被要求改密码就可以了

========================================
查询当前登录用户拥有的表信息

select table_name from user_tables;

查询表有多少列和列的详细信息:
desc dept;

=================================================
oracle时间格式的转换

改变当前会话的时间格式 :alter session set nls_date_format='YYYY-MM-DD';

select ename,round((sysdate-hiredate)/365,0) from emp;

round(x,y)   round函数对x进行四舍五入,y表示最后小数点后取多少位;

========================================================================================
select ename,round((sysdate-hiredate)/365,0) from emp order by 2;

select ename as "姓名",round((sysdate-hiredate)/365,0) as "工作年数" from emp order by 2;

去除重复数据:distinct

nvl(x,y)  x有值则返回X,X为null则返回Y的值

=========================================
oracle数据库的5个约束
主键    constraint pk_items primary key
  
外键   constraint pk_business foreign key(itemno) references items (itemNo)

非空   not null

唯一   unique

条件(检查约束)   check key    constraint ch_business check(price>0 and price<30000)

主键约束(primary key,pk) 特性是非空且唯一
唯一约束(unique key,uk) 特性是唯一
检查约束(check key,ck) 特性是填入的记录的范围
非空约束(not null,nn) 特性是非空
外键约束(foreign key,fk) 特性是表与表之间的联系列
alter table business add constraint fk_business foreign key(itemno) references items(itemno);

create table business(busino number(2) constraint pk_business primary key,businame varchar2(32) not null,itemno number(2) constraint fk_business foreign key references items(itemno),start_time date default sysdate);

create table computers(compno number(4) constraint pk_computers primary key,compmodel varchar2(64) unique,buytime date,price number(7,2) constraint ch_computers_1 check(price>0 and price<30000),owner varchar2(32));

============================================================================
oracle常用数据类型
number(p,s)  数值类型
date   日期格式
char(x) 定长字符格式
varchar2(x)  可变长度字符个数,x为最大字符长度
blob  二进制大对象类型   用于存储二进制对象,例如文档照片等
clob  字符大对象类型   用户存储字节的大对象数据,例如简历文章等
bfile 二进制文件 大对象 比如电影胶片等

=============================================================================
修改表结构

alter table business add    增加
alter table business modify  修改
alter table business drop column   删除

===============================================
创建,授权,删除,修改用户

创建语句
create user test identified by 111111;

授权登录语句
grant connect to test;

授权一张表可以给某一个用户查看
grant select on emp to test;

授权创建同义词的权限
grant create any synonym on scott;

回收权限
revoke select on emp to test;

授权增删改查权限
grant select,delete,insert,update onemp to test;

修改密码
alter user test identified by 11;

删除用户
drop user test;

drop user test cascade;  将会删除与此用户相关联的表

查看用户本身的权限
select * from session_privs;

查看用户本身拥有的角色
select * from user_role_privs;

查看角色拥有的权限
select * from dba_sys_privs where grantee='MGMT_USER'  需要dba用户权限

三个常用的角色
CONNECT    登录权限
RESOURCE   增删改查等基本操作权限
DBA        管理员权限

给用户授权基本权限
create user test_1 identified by 11;
grant connect,resource to test_1;

===========================================
数据中的重要对象

视图

sql语句:select d.dname as "部门名称",count(*) as "员工个数",round(avg(e.sal),2) as "平均工资" from emp e,dept d where e.deptno=d.deptno group by d.dname

建立视图:create view avgsal as select d.dname as "部门名称",
       count(*) as "员工个数",
       round(avg(e.sal), 2) as "平均工资"
  from emp e, dept d
 where e.deptno = d.deptno
 group by d.dname;

(需要授予权限 create any view和select any view)

序列

创建序列
create sequence bookID start with 1 increment by 1 maxvalue 99999 nocache nocycle;

select bookid.nextval from dual;

select bookid.currval from dual;

函数-function

系统自带的函数  例如  round(x,y),avg(x),to_date(),upper(),lower()

创建函数

create or replace function  get_empsal(emp_no in number)   --create or replace function    创建或替换函数
  return number   --返回值类型是Number
  is emp_sal number(7,2);   --定义参数emp_sal
  Begin
    select sal
    into emp_sal     --into  代表赋予
    from  emp
    where empno=emp_no;
    return (emp_sal);    --返回emp_sal
  end;
  
  
使用函数
select get_emsal(9477) from dual;

存储过程
创建存储过程
create or replace procedure Delempno(empid in number) is 
begin 
delete from emp where emp.empno=empid;
commit;
end delempno;

执行储存过程
execute delempno;  --在命令窗口下执行

索引
create index id_test_index on test_index(id);

同义词

查看有没有创建同义词的权限
select * from session_privs where privilege like '%SYNONYM%'
创建同义词-表的别名
create synonym bc for business_copy;

创建公共同义词

dba授权给用户创建公共同义词的权限
grant create  public synonym to scott;

--创建同义词的权限
grant create any synonym to scott;

创建公共同义词
create public synonym sss for xuwangcheng.sss;

==============================================================
关闭数据的四个不同命令

shutdown immediate;         rollback没有结束的事务

shutdown abort;             快速关闭

shutdown transactional;       需要等待事务结束,

shutdown normal(shutdown);  需要等待任何会话结束,事务结束

启动oracle的状态
nomount状态

startup nomount;     初始化spfile或pfile文件

show parameter spfile;   查看spfile初始化文件的路径

create pfile='E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\pfile.ora' from spfile;   根据spfile创建pfile
 Create spfile from pfile='Your_pfile_location'
 Create spfile='spfile_location' from pfile='Your_pfile_location'                             根据pfile生成spfile

使用pfile来启动数据库
startup nomount pfile='E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\pfile.ora';

mount状态

alter database mount;   从nomount启动到mount状态

select name from v$controlfile;    查看控制文件的路径

alter databse backup controlfile to trace as 'e:\app\ctl.trc'       将控制文件的内容显示到trace中

startup mount;   启动到mount状态

open状态

alter database open;   从mount启动到open状态
select name from v$datafile;   查看数据库数据文件的位置
select member from v$logfile;   查看重做日志的位置

===========================================
oracle的密码文件

windows中   $ORACLE_HOME/database/    PWDorcl.ora

linux和unix中  $ORACLE_HOME/dbs/      orapworcl

密码文件的作用:允许数据的sysdba和sysoper用户能够通过口令来远程登录

show parameter remote_login_passwordfile;   查看是否允许远程登录       EXCLUSIVE-允许远程登录   NONE-不允许远程登录

禁止sysdba和sysoper用户远程登录数据库
alter system set remote_login_passwordfile=none scope=spfile;

startup force;   强制重启数据库

==========================================================================
表空间

查询及说明表空间
select tablespace_name as "表空间名称",block_size/1024 as "数据块存储大小(kb)",status as "表空间的状态",
contents as "表空间类型",logging as "是否有日志记录" from dba_tablespaces;

1 SYSTEM 8 ONLINE PERMANENT LOGGING                  --permanent   永久保存数据的表空间
2 SYSAUX 8 ONLINE PERMANENT LOGGING
3 UNDOTBS1 8 ONLINE UNDO LOGGING                  --相当给回收站,只回收最近更改的数据
4 TEMP 8 ONLINE TEMPORARY NOLOGGING                --临时表空间的数据,内存不够时存储数据,不能永久保存
5 USERS 8 ONLINE PERMANENT LOGGING
6 EXAMPLE 8 ONLINE PERMANENT NOLOGGING

=======================================================================
数据文件

查询及说明表数据文件
select t.tablespace_name as "表空间名称",t.file_name as "数据文件路径",t.bytes/1024/1024 as "数据文件大小(MB)"
,t.autoextensible as "数据文件是否自动扩展",t.maxbytes/1024/1024 as "数据文件最大空间(MB)" from dba_data_files t;

1 USERS E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF 433.75 YES 32767.984375             
2 UNDOTBS1 E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF 645 YES 32767.984375
3 SYSAUX E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF 500 YES 32767.984375
4 SYSTEM E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF 690 YES 32767.984375
5 EXAMPLE E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF 100 YES 32767.984375

--表空间和数据文件是一对多的关系,一个表空间可能有多个数据文件,但是一个数据文件只对应一个表空间

=======================================================================
重做日志

select * from v$logfile;
1 3 (空白表示正在使用)       ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG NO    
2 2 (stale表示已经提交给数据库)         ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG NO
3 1           ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG NO

==========================================================================================

改变linux中vi编辑器的默认编码格式

vi /etc/vimrc

vim配置文件
wget https://raw.github.com/ma6174/vim/master/setup.sh && bash setup.sh

=======================================================================

异构数据库的迁移

export与import
exp/imp  针对G级别以内或G级别的数据量,可以容忍少量数据的丢失

--------------------------------------------------
export  ---从数据库中导出数据到dump文件中
--------------------------------------------
通过输入 EXP 命令和您的用户名/口令, 导出
操作将提示您输入参数:

例如: EXP SCOTT/TIGER

或者, 您也可以通过输入跟有各种参数的 EXP 命令来控制导出
的运行方式。要指定参数, 您可以使用关键字:

格式:  EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
     例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
               或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字   说明 (默认值)         关键字      说明 (默认值)
--------------------------------------------------------------------------
USERID   用户名/口令           FULL        导出整个文件 (N)
BUFFER   数据缓冲区大小        OWNER        所有者用户名列表
FILE     输出文件 (EXPDAT.DMP)  TABLES     表名列表
COMPRESS  导入到一个区 (Y)   RECORDLENGTH   IO 记录的长度
GRANTS    导出权限 (Y)          INCTYPE     增量导出类型
INDEXES   导出索引 (Y)         RECORD       跟踪增量导出 (Y)
DIRECT    直接路径 (N)         TRIGGERS     导出触发器 (Y)
LOG      屏幕输出的日志文件    STATISTICS    分析对象 (ESTIMATE)
ROWS      导出数据行 (Y)        PARFILE      参数文件名
CONSISTENT 交叉表的一致性 (N)   CONSTRAINTS  导出的约束条件 (Y)

OBJECT_CONSISTENT    只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK             每 x 行显示进度 (0)
FILESIZE             每个转储文件的最大大小
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间
QUERY                用于导出表的子集的 select 子句
RESUMABLE            遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME       用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间
TTS_FULL_CHECK       对 TTS 执行完整或部分相关性检查
TABLESPACES          要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE             调用 iAS 模式导出的模板名

成功终止导出, 没有出现警告。

------------------------------------------------
import ----从dump文件中导入数据到数据库中
-----------------------------------------------
通过输入 IMP 命令和您的用户名/口令, 导入
操作将提示您输入参数:

例如: IMP SCOTT/TIGER

或者, 可以通过输入 IMP 命令和各种参数来控制导入
的运行方式。要指定参数, 您可以使用关键字:

格式:  IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
     例如: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
               或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字   说明 (默认值)        关键字      说明 (默认值)
--------------------------------------------------------------------------
USERID   用户名/口令           FULL       导入整个文件 (N)
BUFFER   数据缓冲区大小        FROMUSER    所有者用户名列表
FILE     输入文件 (EXPDAT.DMP)  TOUSER     用户名列表
SHOW     只列出文件内容 (N)     TABLES      表名列表
IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度
GRANTS   导入权限 (Y)          INCTYPE     增量导入类型
INDEXES   导入索引 (Y)         COMMIT       提交数组插入 (N)
ROWS     导入数据行 (Y)        PARFILE      参数文件名
LOG     屏幕输出的日志文件    CONSTRAINTS    导入限制 (Y)
DESTROY                覆盖表空间数据文件 (N)
INDEXFILE              将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)
FEEDBACK               每 x 行显示进度 (0)
TOID_NOVALIDATE        跳过指定类型 ID 的验证
FILESIZE               每个转储文件的最大大小
STATISTICS             始终导入预计算的统计信息
RESUMABLE              在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME         用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间
COMPILE                编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION  导入流的一般元数据 (Y)
STREAMS_INSTANTIATION  导入流实例化元数据 (N)
DATA_ONLY              仅导入数据 (N)

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

成功终止导入, 没有出现警告。

-----------------------------------------------------
expdp------------数据泵导出
-------------------------------------------------------

数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输
数据对象的机制。该实用程序可以使用以下命令进行调用:

示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导出的运行方式。具体方法是: 在 'expdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

格式:  expdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
   示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
               或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

------------------------------------------------------------------------------

以下是可用关键字和它们的说明。方括号中列出的是默认值。

ATTACH
连接到现有作业。
例如, ATTACH=job_name。

COMPRESSION
减少转储文件大小。
有效的关键字值为: ALL, DATA_ONLY, [METADATA_ONLY] 和 NONE。

CONTENT
指定要卸载的数据。
有效的关键字值为: [ALL], DATA_ONLY 和 METADATA_ONLY。

DATA_OPTIONS
数据层选项标记。
有效的关键字值为: XML_CLOBS。

DIRECTORY
用于转储文件和日志文件的目录对象。

DUMPFILE
指定目标转储文件名的列表 [expdat.dmp]。
例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

ENCRYPTION
加密某个转储文件的一部分或全部。
有效的关键字值为: ALL, DATA_ONLY, ENCRYPTED_COLUMNS_ONLY, METADATA_ONLY 和 NONE

ENCRYPTION_ALGORITHM
指定加密的方式。
有效的关键字值为: [AES128], AES192 和 AES256。

ENCRYPTION_MODE
生成加密密钥的方法。
有效的关键字值为: DUAL, PASSWORD 和 [TRANSPARENT]。

ENCRYPTION_PASSWORD
用于在转储文件中创建加密数据的口令密钥。

ESTIMATE
计算作业估计值。
有效的关键字值为: [BLOCKS] 和 STATISTICS。

ESTIMATE_ONLY
计算作业估计值而不执行导出。

EXCLUDE
排除特定对象类型。
例如, EXCLUDE=SCHEMA:"='HR'"。

FILESIZE
以字节为单位指定每个转储文件的大小。

FLASHBACK_SCN
用于重置会话快照的 SCN。

FLASHBACK_TIME
用于查找最接近的相应 SCN 值的时间。

FULL
导出整个数据库 [N]。

HELP
显示帮助消息 [N]。

INCLUDE
包括特定对象类型。
例如, INCLUDE=TABLE_DATA。

JOB_NAME
要创建的导出作业的名称。

LOGFILE
指定日志文件名 [export.log]。

NETWORK_LINK
源系统的远程数据库链接的名称。

NOLOGFILE
不写入日志文件 [N]。

PARALLEL
更改当前作业的活动 worker 的数量。

PARFILE
指定参数文件名。

QUERY
用于导出表的子集的谓词子句。
例如, QUERY=employees:"WHERE department_id > 10"。

REMAP_DATA
指定数据转换函数。
例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。

REUSE_DUMPFILES
覆盖目标转储文件 (如果文件存在) [N]。

SAMPLE
要导出的数据的百分比。

SCHEMAS
要导出的方案的列表 [登录方案]。

SOURCE_EDITION
用于提取元数据的版本。

STATUS
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

TABLES
标识要导出的表的列表。
例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。

TABLESPACES
标识要导出的表空间的列表。

TRANSPORTABLE
指定是否可以使用可传输方法。
有效的关键字值为: ALWAYS 和 [NEVER]。

TRANSPORT_FULL_CHECK
验证所有表的存储段 [N]。

TRANSPORT_TABLESPACES
要从中卸载元数据的表空间的列表。

VERSION
要导出的对象版本。
有效的关键字值为: [COMPATIBLE], LATEST 或任何有效的数据库版本。

------------------------------------------------------------------------------

下列命令在交互模式下有效。
注: 允许使用缩写。

ADD_FILE
将转储文件添加到转储文件集。

CONTINUE_CLIENT
返回到事件记录模式。如果处于空闲状态, 将重新启动作业。

EXIT_CLIENT
退出客户机会话并使作业保持运行状态。

FILESIZE
用于后续 ADD_FILE 命令的默认文件大小 (字节)。

HELP
汇总交互命令。

KILL_JOB
分离并删除作业。

PARALLEL
更改当前作业的活动 worker 的数量。

REUSE_DUMPFILES
覆盖目标转储文件 (如果文件存在) [N]。

START_JOB
启动或恢复当前作业。
有效的关键字值为: SKIP_CURRENT。

STATUS
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

STOP_JOB
按顺序关闭作业执行并退出客户机。
有效的关键字值为: IMMEDIATE。

----------------------------------------------------------
impdp------------------------数据泵导入
---------------------------------------------------------
数据泵导入实用程序提供了一种用于在 Oracle 数据库之间传输
数据对象的机制。该实用程序可以使用以下命令进行调用:

示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导入的运行方式。具体方法是: 在 'impdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

格式:  impdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
     示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

USERID 必须是命令行中的第一个参数。

------------------------------------------------------------------------------

以下是可用关键字和它们的说明。方括号中列出的是默认值。

ATTACH
连接到现有作业。
例如, ATTACH=job_name。

CONTENT
指定要加载的数据。
有效的关键字为: [ALL], DATA_ONLY 和 METADATA_ONLY。

DATA_OPTIONS
数据层选项标记。
有效的关键字为: SKIP_CONSTRAINT_ERRORS。

DIRECTORY
用于转储文件, 日志文件和 SQL 文件的目录对象。

DUMPFILE
要从中导入的转储文件的列表 [expdat.dmp]。
例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

ENCRYPTION_PASSWORD
用于访问转储文件中的加密数据的口令密钥。
对于网络导入作业无效。

ESTIMATE
计算作业估计值。
有效的关键字为: [BLOCKS] 和 STATISTICS。

EXCLUDE
排除特定对象类型。
例如, EXCLUDE=SCHEMA:"='HR'"。

FLASHBACK_SCN
用于重置会话快照的 SCN。

FLASHBACK_TIME
用于查找最接近的相应 SCN 值的时间。

FULL
导入源中的所有对象 [Y]。

HELP
显示帮助消息 [N]。

INCLUDE
包括特定对象类型。
例如, INCLUDE=TABLE_DATA。

JOB_NAME
要创建的导入作业的名称。

LOGFILE
日志文件名 [import.log]。

NETWORK_LINK
源系统的远程数据库链接的名称。

NOLOGFILE
不写入日志文件 [N]。

PARALLEL
更改当前作业的活动 worker 的数量。

PARFILE
指定参数文件。

PARTITION_OPTIONS
指定应如何转换分区。
有效的关键字为: DEPARTITION, MERGE 和 [NONE]。

QUERY
用于导入表的子集的谓词子句。
例如, QUERY=employees:"WHERE department_id > 10"。

REMAP_DATA
指定数据转换函数。
例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。

REMAP_DATAFILE
在所有 DDL 语句中重新定义数据文件引用。

REMAP_SCHEMA
将一个方案中的对象加载到另一个方案。

REMAP_TABLE
将表名重新映射到另一个表。
例如, REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。

REMAP_TABLESPACE
将表空间对象重新映射到另一个表空间。

REUSE_DATAFILES
如果表空间已存在, 则将其初始化 [N]。

SCHEMAS
要导入的方案的列表。

SKIP_UNUSABLE_INDEXES
跳过设置为“索引不可用”状态的索引。

SOURCE_EDITION
用于提取元数据的版本。

SQLFILE
将所有的 SQL DDL 写入指定的文件。

STATUS
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

STREAMS_CONFIGURATION
启用流元数据的加载

TABLE_EXISTS_ACTION
导入对象已存在时执行的操作。
有效的关键字为: APPEND, REPLACE, [SKIP] 和 TRUNCATE。

TABLES
标识要导入的表的列表。
例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。

TABLESPACES
标识要导入的表空间的列表。

TARGET_EDITION
用于加载元数据的版本。

TRANSFORM
要应用于适用对象的元数据转换。
有效的关键字为: OID, PCTSPACE, SEGMENT_ATTRIBUTES 和 STORAGE。

TRANSPORTABLE
用于选择可传输数据移动的选项。
有效的关键字为: ALWAYS 和 [NEVER]。
仅在 NETWORK_LINK 模式导入操作中有效。

TRANSPORT_DATAFILES
按可传输模式导入的数据文件的列表。

TRANSPORT_FULL_CHECK
验证所有表的存储段 [N]。

TRANSPORT_TABLESPACES
要从中加载元数据的表空间的列表。
仅在 NETWORK_LINK 模式导入操作中有效。

VERSION
要导入的对象的版本。
有效的关键字为: [COMPATIBLE], LATEST 或任何有效的数据库版本。
仅对 NETWORK_LINK 和 SQLFILE 有效。

------------------------------------------------------------------------------

下列命令在交互模式下有效。
注: 允许使用缩写。

CONTINUE_CLIENT
返回到事件记录模式。如果处于空闲状态, 将重新启动作业。

EXIT_CLIENT
退出客户机会话并使作业保持运行状态。

HELP
汇总交互命令。

KILL_JOB
分离并删除作业。

PARALLEL
更改当前作业的活动 worker 的数量。

START_JOB
启动或恢复当前作业。
有效的关键字为: SKIP_CURRENT。

STATUS
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

STOP_JOB
按顺序关闭作业执行并退出客户机。
有效的关键字为: IMMEDIATE。

=================================================================
sqlplus中设置显示数据长度
col file_name for a50;

col tablespace_name for a15;

输入创建表空间的的SQL语句
SQL> create tablespace bank_tbs datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\bank
_tbs02.dbf' size 5M autoextend on maxsize 10G;

创建表空间关联的用户
SQL> create user bankuser identified by 11 default tablespace bank_tbs;

对新创建的用户进行授权
SQL> grant connect,resource to bankuser;

使用新用户连接到数据库
sqlplus bankuser/11@ORCL

创建项目相关的表

==================================================================
数据库迁移

--------导入导出
导出dmp文件

在操作系统的命令行模式输入:   
C:\Windows\system32>exp bankuser/11@ORCL file=E:\app\dmp\bankuser.dmp log=E:\app
\explog\bankuserExp.log;

注意:文件夹需要提前建立,不然会保存找不到自动的文件夹

导入dmp文件
imp bankuser/11@LINUXORCL fromuser=bankuser touser=bankuser file=E:\app\expdum\bankuser\bankuser.dmp log=E:\app\expdum\bankuser\bankuserExp.log;

---------------使用expdp,impdp迁移数据库(只能够在服务端使用)

--expdp   在linux数据库端

创建导出路径
create or replace directory expdp_dir as '/home/oracle/expdp_dir';

将文件夹权限赋给导出账号
grant write,read on directory expdp_dir to bankuser;

创建导出文件夹
mkdir /home/oracle/expdp_dir

文件夹权限更改
chmod 777 expdp_dir

使用oracle账号开始 expdp导出数据

expdp bankuser/11 directory=expdp_dir dumpfile=bankuserLinux.dmp logfile=bankuserLinuxExpdp.log

--impdp 在windows端
将导出的dmp文件和log传到windows上

创建dmp文件路径并赋权限
create directory impdp_dir as 'E:\app\linuxexpdp';
grant write,read on directory impdp_dir to bankuser;

cmd开始导入数据

impdp bankuser/11@windoworcl directory=impdp_dir dumpfile=bankuserLinux.dmp logfile=bankuserLinuxExpdp.log

=================================================================
在影响数据库运行如何快速恢复刚删除的表及数据

oracle中的flashback

恢复级别:
事务闪回          需要撤销某个操作
行级闪回          恢复到某个时间点
表级闪回          恢复已经drop的表和数据
数据库级闪回      需要将数据库恢复到某个时间点

--事务闪回
查看数据库版本:  select * fron v$version;   10g及以上才能使用
查看用户是否支持flashback:   select * from session_privs where privilege like 'FLASHBACK%';
授权给用户flashback的权限:    grant flashback any table to bankuser;
打开数据库的supplemental logging功能 : alter database add supplemental log data;

select * from flashback_transaction_query where table_name='EMP';
查看最近的一条对于此表的操作,undo_sql为可恢复数据的sql语句,执行即可。

--行级闪回

查看N分钟之前的数据:
select * from emp as of timestamp to_timestamp('2015/7/1 15:23:25','yyyy/mm/dd hh24:mi:ss');

更改行号:
alter table emp enable row movement;

flashback闪回到指定时间:
flashback table emp to timestamp to_timestamp('2015/7/1 15:23:25','yyyy/mm/dd hh24:mi:ss');

--更改undo_retention
查看undo_retention设置的值
show parameter undo_retention;

可以恢复的时间值并不仅仅由undo_retention决定,undo表空间的大小也会影响

--表级闪回
flashback table emp to before drop;

查看哪些表可以被表级闪回
select * from user_recyclebin order by droptime desc;
select * from recyclebin order by droptime desc;

--------------------------------------------------------------------------------------------
在window中备份linux数据库
建立.bat批处理脚本,指定计算机任务计划,每天备份一次并保存dmp文件和log文件。
exp bankuser/11@LINUXORCL file=E:\app\backupBankuserLinux\Moday.dmp log=E:\app\backupBankuserLinux\Moday.log

------------------------------------------------------------------------------------------------
恢复三天前的某张表数据

考虑到3天内数据库表的数据变动太多,不能直接全部还原整个表空间

加入今天是星期4,三天前就是星期1,将星期1备份的数据文件Moday.dmp导入到数据库

新建临时账号test
create user test identified by 11;
赋权限
grant connect,resource,dba to test;
导入数据到这个临时用户下
imp test/11@LINUXORCL fromuser=bankuser touser=test file=E:\app\backupBankuserLinux\Moday.dmp log=E:\app\backupBankuserLinux\ImpTest.log

使用test账户给bankuser赋予emp表的增删改查的权限
grant select,delete,insert,update on emp to bankuser;

登录bankuser账户
select * from test.emp;
insert into emp select * from test.emp;

这样就将emp恢复到三天前的数据

-----------------------------------------------------------------------------------------
备份数据库

使用RMAN备份数据库步骤:

1,备份必须保证数据库开启了归档模式:
查看是否开启了归档模式:  archive log list;

没有开启则开启自动归档模式:
关闭数据库   shutdown immediate;
启动到mount状态   startup mount;
查看数据库的归档模式   archive log list;
将归档模式改好激活状态   alter database archivelog;
开启数据库  alter database open;

进入RMAN环境   rman target/

查看rman配置环境   show all;

开启控制文件的自动备份  configure controlfile autobackup on;

查看控制文件自动备份是否开启了   show controlfile autobackup;

简单的全库备份 backup database;

查看备份文件  list backup;

查看可用的备份  list backup summary;

------------------------------------------------------------------------------
编写备份脚本

进入RMAN环境  rman target/
将备份的冗余数设置为10     CONFIGURE RETENTION POLICY TO REDUNDANCY 10;

创建备份目录
mkdir RmanBackupOrcl

写脚本

BackupFull.sh     0级全库备份的脚本

#!/bin/sh

export ORACLE_BASE=/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH

rman target/ << EOF_RMAN

Run{

Allocate channel c1 type disk;

Backup incremental level 0 tag 'db0' format

'/exapp/RmanBackupOrcl/db0_%d_%T_%s' database include current controlfile;

Delete noprompt obsolete;

Release channel c1;

}

#end

Incr1.sh    1级增量备份脚本

#!/bin/sh
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH

rman target/ << EOF_RMAN

Run{

Allocate channel c1 type disk;

Backup incremental level 1 tag 'db1' format

'/exapp/RmanBackupOrcl/db1_%d_%T_%s' database include current controlfile;

Delete noprompt obsolete;

Release channel c1;

}

#end

=============================================================
利用crontab设置自动脚本运行
crontab -e
0 1 * * 0 /exapp/RmanBackupOrcl/BackupFull.sh>>/exapp/RmanBackupOrcl/BackupFull.log
0 1 * * 3 /exapp/RmanBackupOrcl/BackupFull.sh>>/exapp/RmanBackupOrcl/BackupFull.log
30 1 * * 1-2 /exapp/RmanBackupOrcl/Incr1.sh>>/exapp/RmanBackupOrcl/Incr1.log
30 1 * * 4-6 /exapp/RmanBackupOrcl/Incr1.sh>>/exapp/RmanBackupOrcl/Incr1.log

crontab -l查看任务

===============================================================
如何完全恢复数据库

进入数据库   sqlplus "/as sysdba"
强制关闭数据库   shutdown abort;

此时执行startup失败

进入rman环境
rman target/
进入会提示database 处于not open状态

还原数据库 restore database  会还原到最近一次进行全库备份的时间点
恢复数据库 recover database  利用归档日志archivelog和重做日志redo log来recover,时间段是最近一次全库备份的时间到数据库停止运行的时间

开启数据库  sql 'alter database open'

查看数据库的状态是否正常
select instacn_name,status from v$instance;

查看重做日志是否改变
archive log list;
没有从1开始就代表重做日志还是之前的重做日志

每次进行数据库的全库恢复后需进行一次全库备份
=======================================restore与recover=============================
restore 只是用备份来还原,recover是用archivelog或者online log
 
举例说明:
假设我时间点A,做了个备份,时间点B数据库挂了
restore database ;// 这个操作利用时间点A做的备份来还原,返回到时间点A 
recover database ;//这个操作利用archivelog and online log做recover,从时间点A,推进到时间点B
 
 
restore 是轉儲 也是還原被損壞文件(RMAN經常用)
recover 是恢復 通過redo log & archive log恢復
 
restore 还原
recover 恢复

===============================================================================
丢失重做文件如何让恢复

看教程的时候在数据库开启的时候手动删除数据库所有的重做日志,按照书上的方法

alter system switch logfile;          强制日志切换,归档当前的重做日志(前提是数据库开启了自动归档,如果没有开启自动归档,执行这条语句就不会
归档当前重做日志)

shutdown immediate    关闭数据库
startup    走到这一步的时候发现无法开启数据库,但是报的错误与书上的并不一样,书上的是找不到某个文件,而我的报错是

SQL> startup
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           79691776 bytes
Redo Buffers                8482816 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 12588
Session ID: 125 Serial number: 5

没有管,继续依照书上操作
recover database until cancel;        利用归档日志进行恢复

报错:
SQL> recover database until cancel;
ERROR:
ORA-03114: not connected to ORACLE

提示没有连接到数据库,于是准备在去关闭数据库
SQL> shutdown abort;
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist

百度了一下,说法很多
例如重启服务,关闭所有的sqlplus窗口重新开一个等等

重启服务  service oracle restart

照这个网上另外一个教程

SQL> startup mount;
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           79691776 bytes
Redo Buffers                8482816 bytes
Database mounted.
启动到mount状态

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/oracle/app/oradata/ORCL/redo03.log
/oracle/app/oradata/ORCL/redo02.log
/oracle/app/oradata/ORCL/redo01.log

SQL>  alter database clear unarchived logfile group 1;
 alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/oracle/app/oradata/ORCL/redo02.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

alter database clear unarchived logfile group 1;   重组日志,但失败了,后来想应该直接删除重做日志的

SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00350: log 1 of instance ORCL (thread 1) needs to be archived
ORA-00312: online log 1 thread 1: '/oracle/app/oradata/ORCL/redo01.log'

提示的是redo01.log并没有被归档,所以还是用前一条语句吧

根据ORA-00313: open failed for members of log group 2 of thread 1

于是执行语句
SQL> alter database clear unarchived logfile group 2;

Database altered.

执行成功,原来是顺序的原因(百度了并没有找到相关的解释),

SQL> alter database clear unarchived logfile group 1;

Database altered.

SQL> alter database clear unarchived logfile group 3;

Database altered.

SQL> alter database open;

Database altered.

SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     3
Next log sequence to archive   9
Current log sequence           9

发现数据库的日志并不是从1开始的,说明这个只是根据还原了之前的重做日志

****************************这部分是后加的,百度上有人建议这样做保证数据库完整的检查与分析,但是感觉自己并不明白其中的道理**********************************************

把数据库down掉
SQL>shutdown immediate

在init.ora中加入如下参数
_allow_resetlogs_corruption=TRUE

重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel

如果出错,不再理会,发出
SQL>alter database open resetlogs;

数据库被打开后,马上执行一个full export

shutdown数据库,去掉_all_resetlogs_corrupt参数
重建库

import并完成恢复

建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
****************************************************************************

之后百度了很多内容
如果数据库启用了自动归档,数据正常运行,重做文件损坏的话,
如果不是当前活动的重做日志,直接用 clear就可以还原
alter database clear logfile group N;

如果是当前活动的重做日志,但是在被删除前已经被自动归档了则也同样可以使用alter database clear logfile group N;来重组日志

如果是当前活动的重做日志,虽然没有被自动归档,但是由于数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,使用alter database clear unarchived logfile group N;来进行重组日志

以上几种情况其实还原之后是可以保证数据库的一致性的

如果当前重做日志中有活动的事务,数据库需要媒体恢复,日志组需要用来同步:
有两种办法

一是通过alter database clear unarchived logfile group N;强制进行日志重组的方法,但是这样会造成数据库的不一致,但是不会丢失正在较多的数据(主要是未写入数据文件的已提交或未提交数据。)。这个方法实在数据库没有备份的情况下的方法

二是我的书中的方法,如果提前有过备份的话,通过不完全的恢复,来保持数据库的一致性

继续之前的操作
在知道重做日志被删之后,需要alter system switch logfile; 来归档当前的重做日志
然后关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           79691776 bytes
Redo Buffers                8482816 bytes
Database mounted.

拷贝有效的数据库的全备份,并不完全恢复数据库
可以采用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。

SQL> recover database until cancel;
Media recovery complete.

利用alter database open resetlogs打开数据库
SQL> alter database open resetlogs;

Database altered.

这样就会重新生成3个重做日志文件,
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence           1

可以看到,数据库的 日志序号是从1开始的,证明重新生成了重做日志
这种恢复方法可以保证数据库的一致性,即数据库不会产生断点,但是会丢失处理中的事务。

============================================================================================================='

数据库丢失数据文件,控制文件和重做日志怎么恢复

删除ORCL目录下的所有文件  控制文件.ctl,数据文件.dbf,重做日志.log

强制关闭数据库  shutdown abort;

开启数据库  startup     由于没有控制文件,只能初始化到nomount状态(只能读取到spfile)

select instance_name,status from v$instance;   可以验证数据库处于nomount状态

设置ORACLE_SID=ORCL

进入rman环境进行restore控制文件(从最近的一次备份文件中)

rman target/
查看controlfile是否开启了自动备份   show controlfile autobackup;
开启控制文件的自动备份  configure controlfile autobackup on;
*****************************************************************关于开启自动备份控制文件的作用**********
自动备份打开时,会在把数据文件,日志文件,控制文件,SPfile等等都备份完了后,再自动备份一遍当前的控制文件。因为你在上面的备份完成后,控制文件里面记载的信息就发生了变化的,自动备份就会把它备一遍。
自动备份关闭时,就不会最后再备一遍了。
******************************************************************************************************

只有之前开启了控制文件的自动备份,当你用rman进行备份是才会帮你自动备份控制文件

restore controlfile from autobackup;   恢复控制文件

sql 'alter database mount';    启动到mount状态

restore database;    还原数据文件

在sqlpplus窗口

利用归档日志或重做日志来还原数据库保存数据库一致性
recover database using backup controlfile until cancel;
选择 CANCEL

开启数据库并重设redo log
alter database open resetlogs;

之后在进行一次全库备份就可以了

====================================================================
丢失数据文件、控制文件、重做日志、初始化文件如何恢复

必须先修复还原初始化文件才能继续后面的恢复,后面的恢复与上面的步骤其实是一致的

先强制关闭数据库 shutdown abort;
startup  无法启动数据库,因为找不到spfile

可以在这个目录下找到安装数据库生成的pfile文件,里面的内容其实和spfile是一样的,也可以执行修改里面的内容
/oracle/app/admin/ORCL/pfile/init.ora.5292015174910
init.ora.5292015174910就是pfile文件

启动数据库并且指定用这个pfile文件作为初始化文件
startup nomount pfile='/oracle/app/admin/ORCL/pfile/init.ora.5292015174910';

数据库为nomount状态

进入rman环境来恢复控制文件
restore controlfile from autobackup;

启动到mount状态

sql 'alter database mount';

恢复数据库文件
restore database;

进入sqlplus进行 recover恢复
recover database using backup controlfile until cancel;
选择CANCEL

开启数据库
alter database open resetlogs;

archive log list;

=============================================================================
恢复数据库到某个时间点

先删除bankuser的emp表,再删除scott的salgrade表,
假设十天后来将数据库还原到这个点,flashback闪回不能使用,就得靠rman了

更改数据库的时间格式    alter session set nls_data_format='yyyymmdd hh24:mi:ss';

查询当前时间  select sysdate from dual;
SYSDATE
-----------------
20150703 14:45:29

现在假如要还原到20150703 12:00:00

关闭数据库 shutdown immediate;

进入rman target/环境   
启动数据库到startup mount

还原数据库   restore database;

修改时间格式
RMAN> sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"';

恢复到指定的时间
RMAN> recover database until time '20150703 12:00:00';

报错   RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time

解决:
list incarnation;      查看数据库的原型列表

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       ORCL     1411457420       PARENT  1          15-AUG-09
2       2       ORCL     1411457420       PARENT  945184     29-JUN-15
5       5       ORCL     1411457420       PARENT  1138964    03-JUL-15
7       7       ORCL     1411457420       CURRENT 1139335    03-JUL-15
3       3       ORCL     1411457420       ORPHAN  1141035    02-JUL-15
6       6       ORCL     1411457420       ORPHAN  1141167    03-JUL-15
4       4       ORCL     1411457420       ORPHAN  1143236    02-JUL-15

其中status为CURRENT为当前的系统原型,所以前一个原型号为6(resetlogs之前的)
重置数据库到前一个原型
reset database to incarnation 6;

原因是:系统恢复要用到日志文件 当重置日志号后,系统恢复时默认会使用日志号后的日志文件。当我们要恢复到日志号前的某个时间点的时候,那么肯定需要用到日志号前的日志,所以需要重置 原型号到“恢复指定时间点”之前的原型。

RMAN> recover database until time '20150703 12:00:00';
执行失败:
RMAN> recover database until time '20150703 12:00:00';

Starting recover at 03-JUL-15
using channel ORA_DISK_1

starting media recovery
media recovery failed
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/03/2015 15:09:00
RMAN-11003: failure during parse/execution of SQL statement: alter database recover if needed
 start until time 'JUL 03 2015 12:00:00'
ORA-10879: error signaled in parallel recovery slave 
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01190: 控制文件或数据文件 1 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 1: '/oracle/app/oradata/ORCL/system01.dbf'

出现这个问题是由于控制文件和数据文件的不一致性造成的,可能控制文件是新的,而数据文件是从旧的备份文件中恢复过来的。导致不一致性使数据库无法启动。

解决办法:
更改隐含参数
ALTER SYSTEM SET "_allow_resetlogs_corruption"=TRUE SCOPE=SPFILE;
alter system set "_allow_terminal_recovery_corruption"=true scope=spfile ;

alter database open resetlogs;

这种方法其实是强制在开启数据库库是忽略检查某些项,会遗留某些问题,建议使用imp/exp重构数据库

备注:再每次alter database open resetlogs;后一定要做一次全库备份,此方式启动数据库后,之前的全库 备份都会不能用,下次再恢复数据库时就会报错。

======================
继续之前的操作,还原数据库到某一个时间点

先使用脚本来进行一次全库备份

shutdown abort;
startup mount;

rman环境:
restore database;
sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"';

recover database until time '20150703 15:46:00';

RMAN> recover database until time '20150703 15:46:00';

Starting recover at 03-JUL-15
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:09

Finished recover at 03-JUL-15

还原成功

sqlplus窗口

alter database open resetlogs;

archive log list;

执行脚本做一次全库备份

=======================================================================================================
将数据库恢复到某个SCN

查看当前的scn号
select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1142962

根据scn号查询时间:
select to_char(scn_to_timestamp(1032414),'YYYY-MM-DD HH24:MI:SS') from dual;

SQL> select to_char(scn_to_timestamp(1032414),'YYYY-MM-DD HH24:MI:SS') from dual;

TO_CHAR(SCN_TO_TIMESTAMP(1032414),'YYYY-MM-DDHH24:MI:SS')
---------------------------------------------------------
2015-06-29 19:17:14

根据时间查询scn号

select timestamp_to_scn(to_date('2015-7-1 15:23:34','YYYY-MM-DD HH24:MI:SS')) from dual;

SQL> select timestamp_to_scn(to_date('2015-7-1 15:23:34','YYYY-MM-DD HH24:MI:SS')) from dual;

TIMESTAMP_TO_SCN(TO_DATE('2015-7-115:23:34','YYYY-MM-DDHH24:MI:SS'))
--------------------------------------------------------------------
                                                             1088985

alter session set nls_date_format='yyyymmdd hh24:mi:ss';

根据需要还原的大概时间找到对应的scn号
select * from (select time_dp,scn from smon_scn_time order by time_dp desc ) where rownum<20;
SQL> select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where rownum<20;

TIME_DP                  SCN
----------------- ----------
20150703 08:42:53    1143429
20150703 08:37:44    1143318
20150703 08:32:59    1143210
20150703 08:27:49    1143080
20150703 08:23:05    1142953
20150703 08:17:49    1142836
20150703 08:12:49    1142712
20150703 08:08:07    1142613
20150703 08:02:48    1142260
20150703 07:57:46    1142151
20150703 07:52:39    1141933

TIME_DP                  SCN
----------------- ----------
20150703 07:36:58    1141458
20150703 07:31:55    1141256
20150702 10:08:16    1138704
20150702 08:46:02    1138227
20150702 08:40:43    1138096
20150702 08:35:40    1137982
20150702 08:30:52    1137855
20150702 08:25:43    1137748

19 rows selected.

假如需要恢复的时间点大概是7月3日的8点之后,从上可以看出,在8点之前能恢复到scn号为   20150703 07:57:46    1142151

shutdown abort;
startup mount;

rman target/
restor database;

recover database until scn  1142151;

sql 'alter database open resetlogs';

执行脚本做全库备份

========================================================================================================

跟踪数据库变化的数据

1、激活审计
默认审计功能是关闭的

SQL> show parameter audit_sys_operations;

NAME                                 TYPE                               VALUE
------------------------------------ ---------------------------------  ------------------------------
audit_sys_operations                 boolean                              FALSE

修改

SQL> alter system set audit_sys_operations=TRUE scope=spfile;

System altered.

SQL> alter system set audit_trail=db scope=spfile;

System altered.

重启数据库使设置生效

2、定义审计表

execute dbms_fga.add_policy(object_schema=>'bankuser',object_name=>'emp',policy_name=>'chk_emp',statement_types=>'update,delete,insert');

execute dbms_fga.add_policy(object_schema=>'bankuser',object_name=>'dept',policy_name=>'chk_dept',statement_types=>'update,delete,insert');

3、授权普通用户查看审计表

grant select on dba_fga_audit_trail to bankuser;

4、模式场景

对表进行删除等操作
conn bankuser/11

SQL> delete from emp where ename='jeery';
1 row deleted.
SQL> insert into dept values(50,'newtest','hefei');
1 row created.
SQL> update emp set ename='xuwang' where empno='7123';
1 row updated.
SQL> commit;
Commit complete.

5、查看审计表
SQL> select timestamp,sql_text from sys.dba_fga_audit_trail;

TIMESTAMP
------------------
SQL_TEXT
--------------------------------------------------------------------------------
03-JUL-15
delete from emp where ename='jerry'

03-JUL-15
delete from emp where ename='jeery'

03-JUL-15
insert into dept values(50,'newtest','hefei')

TIMESTAMP
------------------
SQL_TEXT
--------------------------------------------------------------------------------
03-JUL-15
update emp set ename='xuwang' where empno='7123'

6、取消审计

execute dbms_fga.drop_policy(object_schema=>'bankuser',object_name=>'emp',policy_name=>'chk_emp');
execute dbms_fga.drop_policy(object_schema=>'bankuser',object_name=>'dept',policy_name=>'chk_dept');

====================================================================================================
分析数据库的日志发生了什么变化
LogMiner工具
1、确定具体时间的DML操作,把相应的归档日志恢复到数据库中
2、用LogMiner来分析相应的归档日志

-----------------------------
1、操作表的数据并生成归档日志
conn bankuser/11

SQL> delete from emp where ename='xuwang';

1 row deleted.

SQL> insert into dept values(90,'sadasd','dasda');

1 row created.

SQL> update emp set empno='9999' where ename='tom';

0 rows updated.

SQL> commit;

Commit complete.

切换sys账号,生成归档日志

conn /as sysdba

SQL> alter system switch logfile;

System altered.

2、查找数据库归档日志序号

设置时间格式

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

查看记录归档日志信息的视图
SQL> desc v$log_history;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 RECID                                              NUMBER
 STAMP                                              NUMBER
 THREAD#                                            NUMBER
 SEQUENCE#                                          NUMBER
 FIRST_CHANGE#                                      NUMBER
 FIRST_TIME                                         DATE
 NEXT_CHANGE#                                       NUMBER
 RESETLOGS_CHANGE#                                  NUMBER
 RESETLOGS_TIME                                     DATE

select sequence#,first_time from v$log_history order by first_time;

SQL> select sequence#,first_time from v$log_history order by first_time desc;

SEQUENCE# FIRST_TIME
---------- -------------------
         1 2015-07-03 17:09:42
         1 2015-07-03 10:35:49
         2 2015-07-02 20:04:31
         1 2015-07-02 19:39:49
        17 2015-07-02 19:23:17
        16 2015-07-02 19:20:29
        15 2015-07-02 19:08:24
        14 2015-07-02 19:06:14
        13 2015-07-02 18:07:51
        12 2015-07-02 16:54:55
        11 2015-07-02 09:42:11

SEQUENCE# FIRST_TIME
---------- -------------------
        10 2015-07-02 09:05:48
         9 2015-07-01 15:00:36
         8 2015-06-30 11:03:25
         7 2015-06-29 20:02:30
         6 2015-06-29 18:22:18
         5 2015-06-29 17:47:54
         4 2015-06-29 17:47:16
         3 2015-06-29 17:46:20
         2 2015-06-29 17:45:33
         1 2015-06-29 17:44:47

21 rows selected.

3、确定需要分析的日志文件

/oracle/temp_bank/ORCL/archivelog  归档日志路径

SQL> select name,first_time from v$archived_log order by first_time desc;

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------
/oracle/app/oradata/ORCL/redo03.log

/oracle/app/oradata/ORCL/redo02.log

/oracle/temp_bank/ORCL/archivelog/2015_07_07/o1_mf_1_2_bsq54hv5_.arc
2015-07-03 19:30:46

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdwm76d_.arc
2015-07-03 17:09:42

/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdnbq3x_.arc
2015-07-03 15:52:11

/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdhsd5s_.arc
2015-07-03 15:31:42

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsd0fnxb_.arc
2015-07-03 10:35:49

/oracle/app/oradata/ORCL/redo01.log
2015-07-03 10:35:49

2015-07-02 19:39:49

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------

2015-07-02 19:08:24

2015-07-02 19:06:14

2015-07-02 18:07:51

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------

2015-07-02 16:54:55

2015-07-02 09:42:11

/oracle/temp_bank/ORCL/archivelog/2015_07_02/o1_mf_1_10_bs95qmvz_.arc
2015-07-02 09:05:48

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------
/oracle/temp_bank/ORCL/archivelog/2015_07_02/o1_mf_1_9_bs93mg3m_.arc
2015-07-01 15:00:36

/oracle/temp_bank/ORCL/archivelog/2015_07_01/o1_mf_1_8_bs740pwj_.arc
2015-06-30 11:03:25

/oracle/temp_bank/ORCL/archivelog/2015_06_30/o1_mf_1_7_bs41r8hp_.arc
2015-06-29 20:02:30

NAME
--------------------------------------------------------------------------------
FIRST_TIME
-------------------
/oracle/temp_bank/ORCL/archivelog/2015_06_29/o1_mf_1_6_bs2dypbh_.arc
2015-06-29 18:22:18

/oracle/temp_bank/ORCL/archivelog/2015_06_29/o1_mf_1_5_bs272vks_.arc
2015-06-29 17:47:54

20 rows selected.

以上可知,最新的归档日志为/oracle/temp_bank/ORCL/archivelog/2015_07_07/o1_mf_1_2_bsq54hv5_.arc   2015-07-03 19:30:46

4、分析归档日志(Logminer)

execute dbms_logmnr.add_logfile(logfilename=>'/oracle/temp_bank/ORCL/archivelog/2015_07_07/o1_mf_1_2_bsq54hv5_.arc',options=>dbms_logmnr.new);

分析多个日志

execute dbms_logmnr.add_logfile(logfilename=>'/oracle/temp_bank/ORCL/archivelog/2015_07_07/o1_mf_1_2_bsq54hv5_.arc',options=>dbms_logmnr.addfile);

5、启动LogMiner

execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

6、将分析的数据库放入表中

create table logminer_20150707 tablespace BANK_TBS AS select * from v$logmnr_contents;

将查表权限赋给bankuser用户
grant select on logminer_20150707 to bankuser;

结束logminer分析
execute dbms_logmnr.end_logmnr;

7、查看分析结果
select t.timestamp,t.sql_redo,t.sql_undo,t.seg_owner from sys.logminer_20150707 t where t.seg_owner='BANKUSER' and t.sql_undo is not null;

这样就可以查出来指定时间内指定表的变化

=============================================================================================================
日常维护数据库

1、检查操作系统
进入 cd /var/log

messages  记录Linux操作系统常见的系统和服务错误
lastlog   记录最后一次用户成功登陆的时间ip等信息
secure    linux系统安全日志    记录用户和工作组的变化情况,用户登录认证情况
btmp      记录linux登录失败的用户、时间以及远程ip地址
cron      记录crontab任务的执行情况

2、检查数据库的日志
查看警告日志的路径
sqlplus窗口
show parameter background_dump_dest;

SQL> show parameter background_dump_dest;

NAME     TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
background_dump_dest     string
/oracle/app/diag/rdbms/orcl/ORCL/trace

cd /oracle/app/diag/rdbms/orcl/ORCL/trace

带有ORA和Error的一般为错误日志

3、检查系统的磁盘空间情况
df -lh

4、检查数据库的表空间使用率

select a.tablespace_name as "表空间",
       round((a.maxbytes / 1024 / 1024), 2) as "最大可使用(可扩展)空间 MB",
       round((a.bytes / 1024 / 1024), 2) as "占用磁盘真实大小 MB",
       round(((a.bytes - b.bytes) / 1024 / 1024), 2) as "数据文件大小 MB",
       round(((a.maxbytes - a.bytes + b.bytes) / 1024 / 1024), 2) as "可以使用的磁盘空间 MB",
       round(((a.bytes - b.bytes) / a.maxbytes) * 100, 2) as "使用百分比 %"
  from (select tablespace_name, sum(bytes) bytes, sum(maxbytes) maxbytes
          from dba_data_files
         where maxbytes != 0
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes) bytes, sum(bytes) largest
          from dba_free_space
         group by tablespace_name) b
 where a.tablespace_name = b.tablespace_name
 order by ((a.bytes - b.bytes) / a.maxbytes) desc;
 
 
5、检查数据库的数据文件是否为自动扩展
 
set linesize 1000;
set pagesize 30; 
column file_id format a32;
column file_name format a32;
column tablespace_name format a32;
column autoextensible format a32;
select file_name,tablespace_name,autoextensible from dba_data_files;

sqlplus "/as sysdba"<<!
set linesize 1000;
set pagesize 30;
column file_id format a32;
column file_name format a32;
column tablespace_name format a32;
column autoextensible format a32;
select file_name,tablespace_name,autoextensible from dba_data_files;
quit
!
echo

6、检查备份是否出错

如果使用crontab进行定时备份
crontab -l 
查看备份日志路径
检查备份日志中是否有  RMAN-

Recovery Manager complete.表示备份成功!

7、实时监控linux系统
top命令

8、查看oracle数据库的进程
ps -ef|grep ora_

9、查看oracle数据库的监听进程
lsnrctl status;

===========================================================
对数据库进行监控检查

AWR  自动工作负载库
每隔一个小时搜集数据库信息生成报告最多保留7天

1、手动生成一个数据库的快照
sqlplus窗口
execute dbms_workload_repository.create_snapshot();

查看文件   $ORACLE_HOME/rdbms/admin/awrrpt.sql

执行上面的sql文件
sqlplus窗口

@?/rdbms/admin/awrrpt.sql;

2、自动负载报告说明
http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html

3、数据库自动诊断工具  ADDM

执行诊断的sql脚本
@?/rdbms/admin/addmrpt.sql

============================================================
oracle数据库的体系结构

Oracle Server主要组成由数据库实例(Oracle Instance)和数据库(物理文件Oracle Database)组成

Oracle Database由真实存在的各种数据库文件组成: Data files(数据文件)、Control files(控制文件)、Redo log files(重做文件)、 Parameter file(初始化文件pfile或spfile)、Password file(密码文件)
、Archived log files(归档日志文件)等组成

-----------------------------------------------------------------------

[oracle@oracleServer ORCL]$ ls -ltr
总计 1478492
-rw-r----- 1 oracle oinstall   5251072 07-07 17:00 users01.dbf
-rw-r----- 1 oracle oinstall  52429312 07-07 17:00 redo02.log
-rw-r----- 1 oracle oinstall  52429312 07-07 17:00 redo01.log
-rw-r----- 1 oracle oinstall  11542528 07-07 17:45 bank_data01.dbf
-rw-r----- 1 oracle oinstall  20979712 07-08 18:00 temp01.dbf
-rw-r----- 1 oracle oinstall  78651392 07-09 09:20 undotbs01.dbf
-rw-r----- 1 oracle oinstall 713039872 07-09 09:20 system01.dbf
-rw-r----- 1 oracle oinstall 534781952 07-09 09:20 sysaux01.dbf
-rw-r----- 1 oracle oinstall  52429312 07-09 09:20 redo03.log
-rw-r----- 1 oracle oinstall   9748480 07-09 09:21 control01.ctl
[oracle@oracleServer ORCL]$ pwd
/oracle/app/oradata/ORCL

PS:上目录下保存Oracle database的控制文件.ctl、数据文件.dbf、重做日志redo*.log

------------------------------------------------------------------------------
查看初始化文件 .ora
show parameter spfile;
/oracle/app/product/11.2.0/dbs/spfileORCL.ora

linux系统下查看 strings spfileORCL.ora

ORCL.__db_cache_size=96468992
ORCL.__java_pool_size=4194304
ORCL.__large_pool_size=4194304
ORCL.__oracle_base='/oracle/app'#ORACLE_BASE set from environment
ORCL.__pga_aggregate_target=146800640
ORCL.__sga_target=272629760
ORCL.__shared_io_pool_size=0
ORCL.__shared_pool_size=155189248
ORCL.__streams_pool_size=0
*._allow_resetlogs_corruption=TRUE
*._allow_terminal_recovery_corruption=TRUE
*.audit_file_dest='/oracle/app/admin/ORCL/adump'
*.audit_sys_operations=TRUE
*.audit_trail='DB'
.compatible='11.2.0.0.0'
*.control_files='/oracle/app/oradata/ORCL/control01.ctl','/oracle/temp_bank/ORCL/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORCL'
*.db_recovery_file_dest='/oracle/temp_bank'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=417333248
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.proces
ses=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

------------------------------------------------------------------------
查看归档日志  .arc
select name from v$archived_lo;
/oracle/app/oradata/ORCL/redo01.log
/oracle/app/oradata/ORCL/redo02.log
/oracle/app/oradata/ORCL/redo03.log
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsd0fnxb_.arc
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdhsd5s_.arc
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdnbq3x_.arc
/oracle/temp_bank/ORCL/archivelog/2015_07_03/o1_mf_1_1_bsdwm76d_.arc
/oracle/temp_bank/ORCL/archivelog/2015_07_07/o1_mf_1_2_bsq54hv5_.arc

归档日志路径  /oracle/temp_bank/ORCL/archivelog   目录下按日期存放

===============================================================================
Oracle Instance 数据库实例详解
实例运行必须的5个进程:SMON、PMON、DBWR、LGWR、CKPT。

数据库实例由oracle的内存结构和一些后台进程构成

SQL> startup
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size    2213936 bytes
Variable Size  310380496 bytes
Database Buffers   96468992 bytes
Redo Buffers    8482816 bytes
Database mounted.
Database opened.

oracle instance 由系统全局区System Global Area(SGA)和后台进程组成

----------------------------------------
SGA介绍
SGA(System Global Area)由一组内存结构组成,它是由所有用户进程共享的一块内存区域。启动例程时,Oracle自动分配SGA,关闭例程时,oracle自动释放SGA所占用的内存空间。

组成:
-------------------------------------
Shared Pool  共享池,用于存放最近执行的SQL语句和数据字典信息。
包括:
1、Library Cache 库高速缓冲区:库高速缓存用于存放最近执行的sql语句信息,包括sql语句文本,解析代码值及执行计划。提高sql语句的性能,在提交sql语句和pl/sql程序块时,oracle服务器检查库高速缓冲区中是否存在相同的sql或程序块,若有则执行原有的
2、数据字典高速缓存区(Dictionary cache)用于存放数据字典的信息,包括表、列定义以及权限信息)

库高速缓存和数据字典高速缓存大小是动态变化的,不是固定的。
-----------------------------------

Database Buffer Cache  数据库高速缓冲区,数据高速缓存(Database Buffer cache)用于存放最近访问的数据块信息,它由许多小缓冲区(缓冲区大小=数据尺寸)组成Db_cache_size  定义标准的高速缓存尺寸
Java Pool java池,java存储过程的支持

-----------------------------------------------------
Redo log Buffer 重做日志缓冲区
用于记载实例的变化。执行DDL或DML语句时,服务器进程首先将事物的变化记载到重做日志缓存区,然后才会修改数据高速缓存。
重做日志缓存区由很多重做记录(Redo record)组成,并且每条重做记录记载了被修改数据块的位置以及变换后的数据
---------------------------------------------------

Large Pool   大池,rman 和一些并行处理时候会用到。

Buffer Cache Size    数据缓存,调高数据命中率可以提高性能。按数据块存放。

可以在sqlplus中查看每个区域所占内存大小
show parameter java_pool
show parameter large_pool
show parameter shared_pool

参数为零表示数据库根据需要自动分配所需内存

=================================================================
PGA(Program Global Area)
用于存放服务器进程的数据和控制信息,独立于SGA的一块内存区域。
     当用户连接到Oracle Server时,Oracle server会为每个服务器进程分配相应的PGA.
SGA是所有服务器进程都可共享那个的一块内存区域,而每个服务器进程都具有私有的PGA内存空间。
 客户端在通过sql语句连接database时,必须通过实例Instance来连接和管理数据库。
Connection:客户端进程和服务端进程建立通讯。
Session:当用户经过Oracle server认证后开始建立会话,直到用户退出登录,会话结束

=======================================================================================
oracle数据库进程
实例运行必须的5个进程(缺一不可):
SMON    系统监控进程
PMON    进程监控进程
DBWR    数据库写进程
LGWR    重做日志写进程
CKPT    检查点进程

============================================
Oracle数据库的逻辑结构
 Oracle=数据文件+逻辑结构
 
数据库的组成由上往下:
数据库->一个到多个表空间(Tablespace)->一个或多个段(Segment)->一个到多个区(Extent)->一个到多个块(Block)
一个表空间由数据库的一到多个数据文件组成

验证一个表空间可以有多个数据文件
select file_name,tablespace_name from dba_data_files;

SQL> set linesize 1000
SQL> set pagesize 30
SQL> column file_name format a32
SQL> column tablespace_name format a32
SQL> select file_name,tablespace_name from dba_data_files;

FILE_NAME TABLESPACE_NAME
-------------------------------- --------------------------------
/oracle/app/oradata/ORCL/users01 USERS
.dbf

/oracle/app/oradata/ORCL/undotbs UNDOTBS1
01.dbf

/oracle/app/oradata/ORCL/sysaux0 SYSAUX
1.dbf

/oracle/app/oradata/ORCL/system0 SYSTEM
1.dbf

/oracle/app/oradata/ORCL/bank_da BANK_TBS
ta01.dbf

在BANK_TBS增加一个自动扩展的数据文件
SQL> alter tablespace BANK_TBS add datafile '/oracle/app/oradata/ORCL/bank_data02.dbf' size 5M autoextend on;

Tablespace altered.

SQL> select file_name,tablespace_name from dba_data_files;

查询表空间中包含的段segment
select segment_name,tablespace_name from dba_segments where tablespace_name='BANK_TBS';

SQL> select segment_name,tablespace_name from dba_segments where tablespace_name='BANK_TBS';

SEGMENT_NAME  TABLESPACE_NAME
------------------------- ------------------------------
DEPT  BANK_TBS
SALGRADE  BANK_TBS
DEPT  BANK_TBS
EMP  BANK_TBS
SALGRADE  BANK_TBS
EMP  BANK_TBS
LOGMINER_20150707  BANK_TBS
PK_DEPT_XWC  BANK_TBS
PK_DEPT_XWC  BANK_TBS
BIN$Gc0h4G6OCh3gUKjACgFls BANK_TBS
w==$0

PK_EMP_XWC  BANK_TBS

11 rows selected.

一个EMP表中有多少个区(extent)
select owner,segment_name,tablespace_name,extent_id from dba_extents where segment_name='EMP';

SQL> select owner,segment_name,tablespace_name,extent_id from dba_extents where segment_name='EMP';

OWNER   SEGMENT_NAME     TABLESPACE_NAME     EXTENT_ID
------------------------------------------------------------------------------------------
SCOTT     EMP          USERS             0
TEST     EMP          BANK_TBS         0
BANKUSER   EMP          BANK_TBS         0

SQL>

============================================================================================================
数据库的表空间详细解析
一般分为:系统表空间、辅助表空间、临时表空间、还原表空间、用户表空间

查看每个数据库表空间的类型
select tablespace_name,contents from dba_tablespaces;
SQL> select tablespace_name,contents from dba_tablespaces;

TABLESPACE_NAME       CONTENTS
------------------------------ ---------------------------
SYSTEM       PERMANENT
SYSAUX       PERMANENT
UNDOTBS1       UNDO
TEMP         TEMPORARY
USERS         PERMANENT
BANK_TBS       PERMANENT

6 rows selected.

数据库表空间介绍:
 SYSTEM               系统表空间-包含数据库运行所需的基本信息
 SYSAUX               辅助表空间-辅助SYSTEM表空间,适用一些不是很重要的工作
 TEMP                 临时表空间-不会长久保存
 UNDOTBS              还原表空间-保存历史数据,但不会长久保存,相当于垃圾回收站
 USERS                用户表空间-数据库用户存放数据用,一般新建的用户如果没有指定默认表空间则会默认把数据放在这个表空间下
 BANK_TBS             用户表空间-新建用户指定了默认表空间(新建)

类型介绍:
PERMANENT  为永久保存的表空间
UNDO  为重做表空间,存放历史数据
TEMPORARY  为存放临时数据的表空间

创建一个自动扩展的永久表空间
create tablespace test1 datafile '/oracle/app/oradata/ORCL/test_data01.dbf' size 5M autoextend on;

创建一个还原表空间
create undo tablespace test_undo datafile '/oracle/app/oradata/ORCL/test_undo.dbf' size 5M autoextend on;

创建一个临时表空间
create temporary tablespace test_temp tempfile '/oracle/app/oradata/ORCL/test_temp.dbf' size 5M autoextend on;

查看新创建的表空间
select tablespace_name,contents from dba_tablespaces where tablespace_name in ('TEST1','TEST_UNDO','TEST_TEMP');

======================================================================================================

怎样优化Oracle数据库,有几种方式? 
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化 
物理优化的一些原则: 
1). Oracle的运行环境(网络,硬件等) 
2). 使用合适的优化器 
3). 合理配置oracle实例参数 
4). 建立合适的索引(减少IO) 
5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突) 
6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO) 
   逻辑上优化: 
1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用 
2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中 
如: select * from Emp where name=?  这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好 
3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能 
4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时 
5). 选择有效的表名 
对于多表连接查询,可能oracle的优化器并不会优化到这个程度, oracle 中多表查询是根据FROM字句从右到左的数据进行的,那么最好右边的表(也就是基础表)选择数据较少的表,这样排序更快速,如果有link表(多对多中间表),那么将link表放最右边作为基础表,在默认情况下oracle会自动优化,但是如果配置了优化器的情况下,可能不会自动优化,所以平时最好能按照这个方式编写sql 
6). Where字句 规则 
Oracle 中Where字句时从右往左处理的,表之间的连接写在其他条件之前,能过滤掉非常多的数据的条件,放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引 
7). 使用Exits Not Exits 替代 In  Not in 
8). 合理使用事务,合理设置事务隔离性 
数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数

===================================================================================================
 
 sqlplus中通过指定的参数,运行指定的命令文件
 
 
ACC[EPT] 变量 [DEF[AULT] 值] [PROMPT 文本 | NOPR[OMPT]]
  允许用户输入置换变量的值
  CL[EAR] [SCR[EEN]]
  清除屏幕
  CL[EAR] SQL
  清除 SQL 缓冲区
  COL[UMN] [列] [格式] [NEW_VALUE 变量]
  定义一个列的格式,显示一个列的格式,或者显示所有列格式
  CON[NECT] [用户名/口令@数据库]
  带有指定用户连接到数据库
  DEF[INE] [变量] [ = 文本]
  定义置换变量,显示一个变量,或者显示所有置换变量。
  DESC[RIBE] 对象
  给指定对象一个描述
  DISC[CONNECT]
  从数据库断开
  EDIT
  显示文本编辑器以编辑 SQL 缓冲区
  EXEC[UTE] 过程
  运行指定的过程
  EXIT [APPLICATION]
  退出正在运行的脚本或关闭命令窗口,添加APPLICATION 参数也将关闭 PL/SQL Developer 。
  GET [文件名]
  载入命令文件到编辑器
  HOST [命令]
  执行主机命令
  HELP [关键词]
  对关键词提供 SQL 帮助
  PAUSE [信息]
  显示信息和暂停,直到用户按确定或取消按钮为止
  PRI[NT] [变量]
  显示绑定变量或所有绑定变量的值
  PROMPT [文本]
  显示指定文本
  QUIT [APPLICATION]
  退出正在运行的脚本或关闭命令窗口,添加APPLICATION 参数也将关闭 PL/SQL Developer 。
  R[UN]
  运行 SQL 缓冲区
  REM[ARK] [文本]
  一个注释行
  SET AUTOP[RINT] [ON | OFF]
  确定绑定变量在运行了 SQL 语句或 PL/SQL 块以后是否自动地被显示出来。
  SET COLSEP [分隔符 | OFF]
  确定了列分隔符(默认 = “ ”)。
  SET CON[CAT] [字符 | ON | OFF]
  确定终止置换变量参照的字符(默认=.)
  SET DEF[INE] [字符 | ON | OFF]
  确定开始置换变量参照的字符(默认=&)
  SET ECHO [ON | OFF]
  确定在脚本里已执行的命令是否被显示出来
  SET ESC[APE] [字符 | ON | OFF]
  确定中断开始置换变量参照字符的字符(默认=\)
  SET FEED[BACK] [ON | OFF]
  确定 SQL 语句受影响行数是否被显示出来
  SET HEA[DING] [ON | OFF]
  确定在结果集列上面的标题是否被显示出来
  SET LONG [宽度]
  确定一个 LONG 列的最大显示宽度
  SET NUM[WIDTH] [宽度]
  确定不带精度的数字列的最大显示宽度
  SET PAGES[IZE] [大小]
  确定在标题被重复以前的结果集的显示行数
  SET PROMPT [提示]
  替换标准的 SQL> 提示,改为你也能使用变量 [user] 、 [db] 或 [connection] 的文字文本。此外,你还可以包括一个绑定变量( set prompt :bind_var_name )。
  SET SCAN [ON | OFF]
  确定置换变量是否应该被扫描
  SET SERVEROUT[PUT] [ON | OFF] [SIZE n]
  确定调用 dbms_output.put_line 的输出是否被显示出来,并且输出缓冲区的大小是多少。
  SET SPOOL*DIRECTORY [目录]
  确定如果 SPOOL 命令没有指定一个绝对路径那么假脱机文件应该被储存在哪一个目录里。
  SET TERM[OUT] [ON | OFF]
  确定已运行的 SQL 语句的输出是否被显示出来
  SET TIMI[NG] [ON | OFF]
  确定关于已运行的 SQL 语句的计时信息是否被显示出来
  SET VER[IFY] [ON | OFF]
  确定当被用于 SQL 语句或 PL/SQL 块的时候置换变量是否被显示出来。
  SHO[W] ERR[ORS] [类型名]
  显示以前编译或者指定对象的错误
  SHO[W] REL[EASE]
  显示当前连接的 Oracle 版本信息
  SHO[W] SQLCODE
  显示已运行的 SQL 语句的结果代码
  SHO[W] USER
  显示当前连接的用户名
  SPO[OL] [文件名 | OFF]
  开始或停止假脱机
  STA[RT] [文件名] [参数列表]
  通过指定的参数,运行指定的命令文件
  STORE SET [文件名]
  在[文件名]里存储所有选项的值,你可以以后运行这个文件以恢复这些选项。
  UNDEF[INE] 变量
  不定义已设定的置换变量
  VAR[IABLE] [变量] [数据类型]
  定义一个绑定变量,显示一个绑定变量或显示所有的绑定变量。
  WHENEVER [OSERROR | SQLERROR] [动作]
  指定一个动作,用于无论 OS 或 SQL 何时出现错误。这个动作既可以是 EXIT 又可以是 CONTINUE ,随便地被 COMMIT 或 ROLLBACK 跟随着。
  上面所有这些命令函数都与 SQL*Plus 相同。下面的命令是 PL/SQL Developer 特有的:
  命令
  含义
  BEAUT[IFY] 文件 | 对象
  使用当前规则或者 SET BEAUTIFIERRULES 命令指定的规则来美化指定文件或数据库对象。
  BROWSE 对象
  在对象浏览器里选择对象
  EDIT 对象
  打开带有对象定义的可编辑窗口
  EDITD[ATA] 表 | 视图
  为带有可编辑结果集的表或视图打开一个 SQL 窗口
  EXPORT[DATA] 表
  为指定表打开导出工具
  INFO
  显示关于连接的信息
  PROP[ERTIES] 对象
  为指定对象显示一个属性窗口
  QUERY[DATA] 表 | 视图
  为带有只读结果集的表或视图打开一个 SQL 窗口
  REC[OMPILE] 对象
  重新编译对象
  SET BEAUT[IFIERRULES] [文件]
  临时使用来自于指定文件的美化器规则,这可以带着BEAUTIFY 命令使用。
  SET COL[WIDTH] [宽度]
  确定结果集里的最大列宽。如果 Width = 0 ,则不限制宽度。默认为 80 。
  SET EXEC[PAUSE] [ON | OFF]
  在下一个命令暂停执行( ON ),或者在下一个命令正常继续执行( OFF )。
  SQLPLUS
  带有当前文件调用 SQL*Plus 。
  TEST 程序单元
  对于指定的程序单元,打开一个带有标准测试脚本的测试窗口。
  VIEW 对象
  打开一个带有对象定义的只读窗口

=====================================================================================================================================
sqlplus显示设置

生产环境的db没法直接用开发工具(比如TOAD、PL/SQL Developer )来连接并进行数据操作,因为有很严格的权限控制(为了db安全考虑),我们开发人员能用的唯一工具就是通过sshterm登录到db server上面,然后用指定的受限用户名通过sqlplus登录,然后进行操作;习惯了使用开发工具的便利,初次回到sqlplus的话会非常不习惯,但只要我们设置一些简单的参数,就可以大大提高sqlplus的可用性;
另外,就是需要从db中导出数据到文件,默认情况下,导出文件中会有很多的垃圾信息,我们需要将他清理掉,此时相关的设置就很有作用啦;
sqlplus的优化主要是通过两种方式来进行:
1、系统参数设置,通过set操作实现(可以搭配show查看配置项,show all可查看所有系统参数设置列表),比如set linesize 180;
2、显示格式设置,通过column操作实现,比如column aa format a32;
3、Session参数设置,通过SQL操作实现,比如alter session set ...;
下面介绍下常用sqlplus set参数列表,更全面的set集合请参考oracle官方文档;
set linesize 180                设置每行显示的字符总数
set pagesize 100             设置每页显示的行数
set feedback on/off          设置是否显示已选择XX行
set heading on/off            设置是否显示列名
set time on/off                   设置是否显示当前系统时间
set timing on/off                设置是否显示每条SQL执行消耗的时间
set termout on/off             设置在执行sql文件时是否在控制台打印相关信息
set trimout on/off              设置是否去除标准输出每行的拖尾空格
set trimspool on/off         设置是否去除spool输出文件中每行的拖尾空格
显示格式的设置主要由column命令完成,其语法为:
column columnName [format format] [heading heading]
比如column login_id format a32 heading 旺旺ID
其中heading 旺旺ID 表示结果集中login_id字段名显示为:旺旺ID;
功能与SELECT LOGIN_ID AS 旺旺ID FROM ...一样;
Session参数的设置就很专业和复杂了,一般开发人员不会涉及到,但是有两个参数我们可以自行设置;
其一是设置日期时间型字段的显示格式,在sqlplus中执行一下命令即可:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
其二是设置当前session的字符编码(编码随各DB会有不同),以便能够显示中文;比如执行以下命令:
alter session set nls_lang='AMERICAN_AMERICA.ZHS16GBK';
当然,这两个参数也可以直接放在OS当前用户的环境变量中,这样就不必每次进入sqlplus之后还需要重复执行以上的命令,会方便很多;
 
====================================================================================== ==========================================================
 
                      oracle -sqlplus设置显示格式

使用sqlplus查询显示结果,显示很乱,下面有种方法可以让她显示的更好看些。
1.设置显示的宽度:
设置前可以先查看当前宽度: 
SQL> show linesize;
linesize 100
SQL> set linesize 1000;
SQL> show linesize;
linesize 1000
2.你还可以设置显示的条数。
SQL> show pagesize;
pagesize 14
SQL> set pagesize 30;
SQL> show pagesize;
pagesize 30
这样就好了。
=============================================================================
oracle的冷备份:
需要关闭数据库进行文件拷贝
需要拷贝的文件有:
1、 所有数据文件  .dbf
2、 所有控制文件  .ctl
3、所有联机REDO LOG文件    redoN.log
4、 Init.ora文件(可选)

(1) 关闭数据库

sqlplus /nolog

sql>connect /as sysdba

sql>shutdown normal;

注:shutdown normal需要等待所有事务/进程全部结束才能close DB

shutdown immediate可以强行结束或回滚正在执行的事务、进程就可以close DB

(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件

sql>cp

(3) 重启Oracle数据库

sql>startup

------------------------------------------------------
oracle的热备份
正在运行的数据库,开启了自动归档模式
alter database archivelog;

1,联机备份
将表空间设置为备份模式   
alter tablespace users begin backup;

此时可以手动复制dbf数据文件

复制之后返回正常模式
alter tablespace users end backup;

联机备份会产生大量的重做日志,原因:     进行联机热备份时,使用的是操作系统的copy命令,每次copy的数据库很小与oracle的block size不一样,这样会导致一个数据块会被读取多次,而且每次读取都是不一样的更新,在备份模式下,oracle会进行数据块前映象这个操作,如果有DML操作,会将整个数据快COPY到REDO中
详细解答   http://blog.csdn.net/cymm_liu/article/details/7899056

2,脱机备份
脱机备份的优点是会产生较少的重做日志文件,但缺点是当用户正在进行脱机备份时所备份的表空间将不能访问,由于system 系统表空间和正在使用
的undo表空间不能脱机,因此脱机备份不适用于system 表空间和正在使用的undo表空间.

alter tablespace users offline;   将需要备份的表空间置于脱机状态
进行数据库文件的复制
alter tablespace users online;    恢复正常

DBA高效入职指南学习笔记相关推荐

  1. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...

  2. 《如何高效阅读一本书》学习笔记

    2023.04.21 <如何高效阅读一本书 / 彭清清著>学习笔记 <如何高效阅读一本书>学习笔记 〇.磨刀不误砍柴工--阅读前先明确以下几点 1.我们为什么要阅读--目的性 ...

  3. 区块链技术指南学习笔记2

    区块链技术指南学习笔记2 密码学 Hash 算法与数字摘要 常见hash算法 数字摘要 加解密算法 加解密系统基本组成 对称加密算法 非对称加密算法 消息认证码与数字签名 消息认证码 数字签名 数字证 ...

  4. Freemaker_入门+深入+开发指南+学习笔记

    freemaker的基本语法 freemaker的基本语法: <# ... > 中存放所有freemaker的内容,之外的内容全部原样输出. <@ ... /> 是函数调用 两 ...

  5. Hadoop权威指南学习笔记三

    HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...

  6. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  7. ZeroC Ice权威指南-学习笔记1——hello world

    前言 ZeroC Ice是一款很好的RPC框架,性能极好.但是参考文档不足是其一大问题,这也影响了它的传播.<ZeroC Ice权威指南>是唯一的中文教材,但写的不尽如人意,作为入门教材, ...

  8. Istio服务网格实践指南 学习笔记(二) Istio架构

    个人学习Istio系列  学习笔记 Istio架构篇 本篇部分参考原书 https://jimmysong.io/istio-handbook/ 仅为个人学习笔记 这幅图中描述了以下内容: 1.Ist ...

  9. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

最新文章

  1. Ubuntu 10.10从零开始建立android 2.2 froyo开发环境
  2. 怎么提升软件测试质量,【软件测试】涨姿势,测试总监亲授如何做测试质量管理...
  3. SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
  4. java里面的文件上传与下载
  5. 如果没有Visual Studio 2015,我们如何创建.NET Core项目 ?
  6. 学python买什么书-19年学习Python有什么好的书籍推荐吗?
  7. 在MyEclipse显示struts2源码和doc文档及自动完成功能
  8. CentOS 挂载数据盘
  9. 解决亚马逊购买的电子书azw3文件转换成epub或mobi文件实现共享
  10. 力扣每日一题2021-09-17有效的数独
  11. 软件测试b s环境如何配置,B/S架构测试环境搭建_SQLServer篇(Win32系统)
  12. 最新公司级 OKRs 案例
  13. 被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...
  14. 有源滤波器——APF
  15. 《疯狂动物城》观影感受
  16. 寒假集训重要内容总结
  17. java新浪微博客户端
  18. Android 7 Nougat 源码目录结构
  19. 安卓手机管理_安卓手机清理大师app下载-安卓手机清理大师下载v1.0.0安卓版
  20. 07.微软又一逆天可视化神器——Power BI

热门文章

  1. USACO_CHA1_挤牛奶
  2. 华为nova2s用哪个型号服务器,华为nova 2s
  3. Python学习笔记05----条件、循环及其他语句
  4. 【自动化】浅度分析自动化行业,深度好文!
  5. 高德(百度)地图驾车路线规划和清除
  6. java并发编程 笔记八
  7. java植物大战僵尸_植物大战僵尸java游戏
  8. 金仓数据库KingbaseES的表空间
  9. validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending c
  10. keil 工程编译后出现 file has been changed outside the editor, reload?