第1章 oracle命令集

1.1 重启数据库

1.1.1 启动数据库

su -root                 切换到oracle安装用户下,我的是root

source .bash_profile       运行oracle的环境变量。以便输入相关命令

sqlplus / as sysdba;        是以DBA身份连接到oracle

startup                  启动数据库

1.1.2 关闭数据库

1、shutdown immediate;      立即关闭

2、shutdown                正常关闭

3、shutdown transactional      关闭事务

4、shutdown abort            强行关闭

1.1.3 启动oracle数据库的三种形式

startup nomount (nomount模式)启动实例不加载数据库

startup mount    (mount模式) 启动实例加载数据库但不打开数据库

startup          (open模式)  启动实例加载数据库并打开数据库

1.2 修改oracle数据库密码

1、sqlplus / nolog;

2、connect / as sysdba;

3、select username from dba_users;                 查看用户列表

4、alter user apps(用户) identified by 123321(密码)    修改用户密码

5、ALTER USER 用户名 ACCOUNT UNLOCK;

6、commit;

注意

注意:如果没有5,6步的话,你的操作就会导致该用户名被锁定。

报错ORA-28000: the account is locked

如果只有第5步,没有第6步,在你退出SQLPlUS之前好用,

退出之后就会同样报错ORA-28000: the account is locked

只有确认提交之后才能生效。

1.3 创建oracle数据库

1.3.1 创建两个数据库的文件(monitor.dbf和monitor_temp.dbf)

CREATE TABLESPACE monitor LOGGING DATAFILE 'E:\app\owner\oradata\orcl\monitor.dbf'

SIZE 100M AUTOEXTEND ON NEXT 32M MAXSIZE 500M EXTENT MANAGEMENT LOCAL;

create temporary tablespace monitor_temp tempfile 'E:\app\owner\oradata\orcl\monitor_temp.dbf'

size 100m autoextend on next 32m maxsize 500m extent management local;

1.3.2 创建用户与上面创建的文件形成映射关系(用户、密码都是monitor)

CREATE USER monitor IDENTIFIED BY monitor DEFAULT TABLESPACE monitor TEMPORARY TABLESPACE monitor_temp;

1.3.3 添加权限

grant connect,resource,dba to monitor;
grant create session to monitor;

1.3.4 系统权限分类

DBA:拥有全部的特权,是系统最高权限,只有DBA才可以创建数据库结构。

resource:resource权限的用户可以创建实体,不能创建数据库结构。

connect:connect权限的用户只能登录数据库,不能创建实体,也不能创建数据库结构。

DBA管理用户:授予connect resource dba权限

普通用户:授予connect resource

 

1.3.5  删除数据库

DROP TABLESPACE monitor INCLUDING CONTENTS AND DATAFILES;

1.3.6 删除用户

drop user monitor cascade;

1.4 登录oracle数据库用户

1.4.1 运行SQLplus工具

C:\Users\wd-pc>sqlplus

1.4.2 直接进入SQLplus命令提示符

C:\Users\wd-pc>sqlplus / nolog

1.4.3 以OS身份连接

C:\Users\wd-pc>sqlplus / as sysdba

或者 connect / as sysdba

1.4.4 普通用户登录

C:\Users\wd-pc>sqlplus scott/123321

或者SQL> connect scott/123321

或者SQL>connect scott/123321@servername

1.4.5 以管理员登录

C:\Users\wd-pc>sqlplus sys/123321 as sysdba

或者SQL>connect sys/123321 as sysdba

1.4.6 切换用户

SQL>connect hr/1234456

1.4.7 退出

exit

1.5 查看当前用户拥有的角色和权限

selcet * from user_role_privs;

select * from session_privs;

1.5.1 当前登录的用户

select user from dual;

或者 select * from user_users;

或者 show user;

1.6 查看oracle数据库的字符集

SQL> select usrenv('language') from dual;

1.6.1 修改字符集

在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog

SQL>conn / as sysdba;   #若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

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 ZHS16GBK;

SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能startup) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息 要解决这个问题有两种方法,一个是,利用INTERNAL_USE 关键字修改区域设置, 还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use。

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

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 NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SQL>SHUTDOWN immediate;

SQL>startup;

如果按上面的做法做,National charset的区域设置就没有问题

第2章 基本的SQL语言

2.1 DDL数据定义语言

2.1.1 create创建

1、创建表

CREATE TABLE <table_name>(

column1 DATATYPE [NOT NULL] [PRIMARY KEY],

column2 DATATYPE [NOT NULL],

...

[constraint <约束名> 约束类型 (要约束的字段)

... ] )

说明: 

DATATYPE --是Oracle的数据类型,可以查看附录。

NUT NULL --可不可以允许资料有空的(尚未有资料填入)。

PRIMARY KEY --是本表的主键。

constraint --是对表里的字段添加约束.(约束类型有

           
Check,Unique,Primary key,not null,Foreign key)。

示例:

create table stu(

s_id number(8) PRIMARY KEY,

s_name varchar2(20) not null,

s_sex varchar2(8),

clsid number(8),

constraint u_1 unique(s_name),

constraint c_1 check (s_sex in ('MALE','FEMALE'))

);

2、  复制表

CREATE TABLE <table_name> as <SELECT 语句>



(需注意的是复制表不能复制表的约束);

示例:

create table test as select * from emp;

如果只复制表的结构不复制表的数据则:

create table test as select * from emp where 1=2;

3、  创建索引

CREATE [UNIQUE] INDEX <index_name> ON <table_name>(字段 [ASC|DESC]);

UNIQUE --确保所有的索引列中的值都是可以区分的。

[ASC|DESC] --在列上按指定排序创建索引。



(创建索引的准则:

1.如果表里有几百行记录则可以对其创建索引(表里的记录行数越多索引的效果就越明显)。

2.不要试图对表创建两个或三个以上的索引。

3.为频繁使用的行创建索引。

)

示例

create index i_1 on emp(empno asc);

4、创建同义词

CREATE SYNONYM <synonym_name> for
<tablename/viewname>

同义词即是给表或视图取一个别名。

示例:

create synonym mm(旧) for emp(新);

2.1.2 alter修改

1.向表中添加新字段

ALTER TABLE <table_name> ADD (字段1 类型 [NOT NULL],

字段2 类型 [NOT NULL]

.... );

2.修改表中字段

ALTER TABLE <table_name> modify(字段1 类型,

字段2 类型

.... );

3 .删除表中字段

ALTER TABLE <table_name> drop(字段1,

字段2

.... );

4 .修改表的名称

RENAME <table_name> to <new table_name>;

5 .对已经存在的表添加约束

ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> 约束类型 (针对的字段名);

示例:

Alter table emp add constraint S_F Foreign key (deptno) references dept(deptno);


6 .对表里的约束禁用;

ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name>;

7 .对表里的约束重新启用;

ALTER TABLE <table_name> ENABLE CONSTRAINT <constraint_name>;

8 .删除表中约束

ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;

示例:

ALTER TABLE emp drop CONSTRAINT <Primary key>;

2.1.3 drop删除

1、删除表

DROP TABLE <table_name>;

示例

drop table emp;

2、删除索引

DROP INDEX <index_name>;

示例

drop index i_1;

4、  删除同义词

DROP SYNONYM <synonym_name>;

示例

drop synonym mm;

2.2 DML数据操纵语言

2.2.1
插入记录

INSERT INTO table_name (column1,column2,...)

values ( value1,value2, ...);

示例

insert into emp (empno,ename) values(9500,'AA');





把 一个表中的数据插入另一个表中

INSERT INTO <table_name> <SELECT 语句>

示例

create table a as select * from emp where 1=2;

insert into a select * from emp where sal>2000;

2.2.2
查询记录

2.2.3
一般查询

SELECT [DISTINCT] <column1 [as
new name] ,columns2,...>

FROM <table1>

[WHERE <条件>]

[GROUP BY <column_list>]

[HAVING <条件>]

[ORDER BY <column_list> [ASC|DESC]]



DISTINCT --表示隐藏重复的行

WHERE --按照一定的条件查找记录

GROUP BY --分组查找(需要汇总时使用)

HAVING --分组的条件

ORDER BY --对查询结果排序

要显示全部的列可以用*表示

示例:

select * from emp;

WHERE 语句的运算符

where <条件1>AND<条件2> --两个条件都满足

示例:

select * from emp where deptno=10 and sal>1000;

where <条件1>OR<条件2> --两个条件中有一个满足即可

示例:

select * from emp where deptno=10 OR sal>2000;

where NOT <条件> --不满足条件的

示例:

select * from emp where not deptno=10;

where IN(条件列表) --所有满足在条件列表中的记录

示例:

select * from emp where empno in(7788,7369,7499);

where BETWEEN .. AND ..  --按范围查找

示例:

select * from emp where sal between 1000 and 3000;

where 字段 LIKE --主要用与字符类型的字段

示例1:

select * from emp where ename like '_C%';

--查询姓名中第二个字母是'C'的人

'-' 表示任意字符;

'%' 表示多字符的序列;

 

2.2.4 where 字段 IS [NOT] NULL --查找该字段是[不是]空的记录

汇总数据是用的函数

SUM --求和

示例:

select deptno,sum(sal) as sumsal from emp GROUP BY
deptno;

AVG --求平均值

MAX --求最大值

MIN --求最小值

COUNT --求个数

2.2.5
子查询

SELECT <字段列表> from <table_name>
where 字段 运算符(<SELECT 语句>);

示例:

select * from emp where sal=(select max(sal) from
emp);

2.2.6
运算符

Any

示例:

select * from emp where sal>ANY(select sal from
emp where deptno=30) and deptno<>30;

--找出比deptno=30的员工最低工资高的其他部门的员工

ALL

select * from emp where sal>ALL(select sal from
emp where deptno=30) and deptno<>30;

--找出比deptno=30的员工最高工资高的其他部门的员工

2.2.7
连接查询

SELECT
<字段列表> from
<table1,table2> WHERE table1.字段[(+)]=table2.字段[(+)]

示例

select empno,ename,dname from emp,dept where
emp.deptno=dept.deptno;

2.2.8
查询指定行数的数据

SELECT
<字段列表> from
<table_name> WHERE ROWNUM<行数;

示例:

select * from emp where rownum<=10;--查询前10行记录

注意ROWNUM只能为1 因此不能写
select * from emp where rownum between 20 and 30;

2.2.9
要查第几行的数据可以使用以下方法:

select * from emp where rownum<=3 and empno not
in (select empno from emp where rownum<=3);

结果可以返回整个数据的3-6行;

不过这种方法的性能不高;如果有别的好方法请告诉我。

2.2.10 update更新数据

UPDATE table_name set column1=new
value,column2=new value,...

WHERE <条件>

示例

update emp set sal=1000,empno=8888 where
ename='SCOTT'

2.2.11
delete删除数据

DELETE FROM <table_name>

WHERE <条件>

示例

delete from emp where empno='7788'

 

 

2.3
DCL数据控制语言

2.3.1
.授权

GRANT <权限列表> to <user_name>;

2.3.2
收回权限

REVOKE <权限列表> from <user_name>

Oracle 的权限列表

connect 连接

resource 资源

unlimited tablespace 无限表空间

dba 管理员

session 会话

2.4
TCL事务控制语言

1.COMMIT 提交;

2.ROLLBACK [TO savepoint] 回滚;

3.SAVEPOINT <savepoint> 保存位置。

第3章 ORACLE其他对象

3.1
视图

3.1.1
创建视图

CREATE [OR REPLACE] VIEW <view_name>

AS

<SELECT 语句>;



OR REPLACE --表示替换以有的视图

3.1.2 删除视图

DROP VIEW <view_name>

3.2
序列

3.2.1
创建序列

CREATE SEQUENCE <sequencen_name>

INCREMENT BY n

START WITH n

[MAXVALUE n][MINVALUE n]

[CYCLE|NOCYCLE]

[CACHE n|NOCACHE];



INCREMENT BY n --表示序列每次增长的幅度;默认值为1.

START WITH n --表示序列开始时的序列号。默认值为1.

MAXVALUE n --表示序列可以生成的最大值(升序).

MINVALUE n --表示序列可以生成的最小值(降序).

CYCLE --表示序列到达最大值后,在重新开始生成序列.默认值为 NOCYCLE。

CACHE --允许更快的生成序列.

示例:

create sequence se_1

increment by 1

start with 100

maxvalue 999999

cycle;

3.2.2
修改序列

ALTER SEQUENCE <sequencen_name>

INCREMENT BY n

START WITH n

[MAXVALUE n][MINVALUE n]

[CYCLE|NOCYCLE]

[CACHE n|NOCACHE];

3.2.3 删除序列

DROP SEQUENCE <sequence_name>

3.2.4 使用序列

1.CURRVAL

返回序列的当前值.

注意在刚建立序列后,序列的CURRVAL值为NULL,所以不能直接使用。

可以先初始化序列:

方法:select <sequence_name>.nextval from dual;

示例:select se_1.nextval from dual;

之后就可以使用CURRVAL属性了



2.NEXTVAL

返回序列下一个值;

示例:

begin

for i in 1..5

loop

insert into emp(empno) values(se_1.nextval);

end loop;

end;





查看序列的当前值

select <sequence_name>.currval from dual;



示例:select se_1.currval from dual;

3.3
用户

3.3.1
创建用户

CREATE USER <user_name> [profile
"DEFAULT"]

identified by "<password>" [default tablespace
"USERS"]

3.3.2 删除用户

DROP USER <user_name> CASCADE

3.4
角色

3.4.1
创建角色

CREATE ROLE <role_name>

identified by "<password>"

3.4.2 删除角色

DROP ROLE <role_name>

第4章 附录

4.1
oracle的数据类型

数据类型

描述

VARCHAR2(size)

可变长度的字符串,其最大长度为size个字节;size的最大值是4000,而最小值是1;你必须指定一个VARCHAR2的size;

NVARCHAR2(size)

可变长度的字符串,依据所选的国家字符集,其最大长度为size个字符或字节;size的最大值取决于储存每个字符所需的字节数,其上限为4000;你必须指定一个NVARCHAR2的size;

NUMBER(p,s)

精度为p并且数值范围为s的数值;精度p的范围从1到38;数值范围s的范围是从-84到127;

例如:NUMBER(5,2) 表示整数部分最大3位,小数部分为2位;

NUMBER(5,-2) 表示数的整数部分最大为7其中对整数的倒数2位为0,前面的取整。

NUMBER 表示使用默认值,即等同于NUMBER(5);

LONG

可变长度的字符数据,其长度可达2G个字节;

DATE

有效日期范围从公元前4712年1月1日到公元后4712年12月31日

RAW(size)

长度为size字节的原始二进制数据,size的最大值为2000字节;你必须为RAW指定一个size;

LONG RAW

可变长度的原始二进制数据,其最长可达2G字节;

CHAR(size)

固定长度的字符数据,其长度为size个字节;size的最大值是2000字节,而最小值和默认值是1;

NCHAR(size)

也是固定长度。根据Unicode标准定义

CLOB

一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节

NCLOB

一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节;储存国家字符集

BLOB

一个二进制大型对象;最大4G字节

BFILE

包含一个大型二进制文件的定位器,其储存在数据库的外面;使得可以以字符流I/O访问存在数据库服务器上的外部LOB;最大大小为4G字节.

4.2
函数

4.2.1
字符函数

名称

描述

CONCAT(字符串1,字符串2)

将字符串1和字符串2连接成一个新的字符串

示例: select CONCAT(job,ename) from emp

LPAD(字段,总的大小,添充字符)

左填充即向右对齐

示例: select empno,lpad(sal,10,'*') from emp

RPAD(字段,总的大小,添充字符)

右填充即向左对齐

示例: select empno,rpad(sal,10) from emp

LOWER(字符串)

将字符串全部变成小写;

UPPER(字符串)

将字符串全部变成大写;

INITCAP(字符串)

将字符串变成第一个字母大写,其余都变成小写;

LENGTH(字符串)

求出字符串的长度;

SUBSTR(字符串,开始位置,长度)

从字符串中取子串;

示例: select substr(ename,2,3) from emp;--从ename的第2位开始取3位

INSTR(字符串,字符)

查看字符是否在字符串中存在;不存在返回0;存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置.

示例:select instr(ename,'S') from emp;

TRIM(字符 FROM 字符串)

去掉字符串首尾的字符;

示例: select trim('S' from ename) from emp;

TO_CHAR()

将不是其他类型转成字符类型;

对于日期型可以控制其格式:TO_CHAR(日期,'格式');

其中格式有: 'YYYY' --以4为显示年;

'YEAR' --以标准格式显示年; 'MM' ; 'MON' ; 'DD' ; 'DAY'; 'HH'
; 'MI' ;'SS'

REPLACE(字符串,字符串1,字符串2)

将字符串中的字符1替换成字符2;

示例: select replace(ename,'SC','SS') from emp;

TRANSLATE(字符串,字符串1,字符串2)

替换多的字符;

示例: select translate(ename,'SH','AB') from emp;

--表示将ename中的'S'换成'A','H'换成'B';

ASCII(char)

求字符的ascii码

NLSSORT(字符串)

对字符串排序.

 

4.2.2
数学函数

名称

描述

ABS(数字)

一个数的绝对值

CEIL(数字)

向上取整;不论小数后的书为多少都要向前进位;

CEIL(123.01)=124;

CEIL(-123.99)=-123;

FLOOR(数字)

向下取整;不论小数后的书为多少都删除;|

floor(123.99)=123;

floor(-123.01)=-124;

MOD(被除数,除数)

取余数;

MOD(20,3)=2

ROUND(数字,从第几为开始取)

四舍五入;

ROUND(123.5,0)=124;

ROUND(-123.5,0)=-124;

ROUND(123.5,-2)=100;

ROUND(-123.5,-2)=-100;

SIGN(数字)

判断是正数还是负数;正数返回1,负数返回-1,0返回0;

SQRT(数字)

对数字开方;

POWER(m,n)

求m的n次方;

TRUNC(数字,从第几位开始)

切数字;

TRUNC(123.99,1)=123.9

TRUNC(-123.99,1)=-123.9

TRUNC(123.99,-1)=120

TRUNC(-123.99,-1)=-120

TRUNC(123.99)=123

GREATEST(数字列表)

找出数字列表中最大的数;

示例:

select greatest(100,200,-100) from dual; --结果为200

LEAST(数字列表)

找出数字列表中最小的数;

SIN(n)

求n的正旋

COS(n)

求n的余旋

TAN(n)

求n的正切

ACos(n)

求n的反正切

ATAN(n)

求n的反正切

exp(n)

求n的指数

LN(n)

求n的自然对数,n必须大于0

LOG(m,n)

求n以m为底的对数,m和n为正数,且m不能为0

4.2.3
日期函数

名称

描述

ADD_MONTHS(日期,数字)

在以有的日期上加一定的月份;

示例:

select add_months(hiredate,20),hiredate from emp;

LAST_DAY(日期)

求出该日期的最后一天.

MONTHS_BETWEEN(日期1,日期2)

求出两个月之间的天树(注意返回的天数为小数);

示例:

select months_between(sysdate,hiredate) from emp;

NEW_TIME(时间,时区,'gmt')

按照时区设定时间.

NEXT_DAY(d,char)

返回d指定的日期之后并满足char指定条件的第一个日期

 

4.2.4
其他函数

名称

描述

VSIZE(类型)

求出数据类型的大小;

NVL(字符串,替换字符)

如果字符串为空则替换,否则不替换

4.3
常用命令

命令

描述

DESC 表名

查看表的信息.

SET SERVEROUT [ON|OFF]

设置系统输出的状态.

SET PAGESIZE
<大小>

设置浏览中没页的大小

SET LINESIZE
<大小>

设置浏览中每行的长度

SET AUTOPRINT
[ON|OFF]

设置是否自动打印全局变量的值

SELECT SYSDATE
FROM DUAL

查看当前系统时间

ALTER SESSION
SET nls_date_format='格式'

设置当前会话的日期格式

示例:ALTER SESSION SET nls_date_format='dd-mon-yy
hh24:mi:ss'

SELECT * FROM
TAB

查看当前用户下的所有表

SHOW USER

显示当前用户

HELP TOPIC

显示有那些命令

SAVE
<file_name>

将buf中的内容保存成一个文件

RUN
<file_name>

执行已经保存的文件;也可以写成@<file_name>

GET
<file_name>

显示文件中的内容

LIST

显示buf中的内容

ED

用记事本打开buf,可以进行修改

DEL 行数

删除buf中的单行

DEL 开始行 结束行

删除buf中的多行

INPUT 字符串

向buf中插入一行

APPEND 字符串

将字符串追加到当前行

C/以前的字符串/替换的字符串

修改buf中当前行的内容

CONNECT

连接

DISCONNECT

断开连接

QUIT

退出sql*plus

EXP

导出数据库(可以在DOS键入exp help=y 可以看到详细说明)

示例: exp scott/tiger full=y file=e:\a.dmp; --导出scott下的所有东西

        exp scott/tiger tables=(emp,dept)
file=e:\emp.dmp --导出scott下的    
               
               
                  
               
               
     emp,dept表

IMP

导入数据库(可以在DOS键入imp help=y 可以看到详细说明)

imp scott/tiger tables=(emp,dept) file=e:\emp.dmp

可以通过help <命令>获得命令的帮助

4.4
异常类型

异常

描述

CURSOR_ALREADY_OPEN

试图"OPEN"一个已经打开的游标

DUP_VAL_ON_INDEX

试图向有"UNIQUE"中插入重复的值

INVALID_CURSOR

试图对以关闭的游标进行操作

INVALID_NUMBER

在SQL语句中将字符转换成数字失败

LOGIN_DENIED

使用无效用户登陆

NO_DATA_FOUND

没有找到数据时

NOT_LOGIN_ON

没有登陆Oracle就发出命令时

PROGRAM_ERROR

PL/SQL存在诸如某个函数没有"RETURN"语句等内部问题

STORAGE_ERROR

PL/SQL耗尽内存或内存严重不足

TIMEOUT_ON_RESOURCE

Oracle等待资源期间发生超时

TOO_MANY_ROWS

"SELECT INTO"返回多行时

VALUE_ERROR

当出现赋值错误

ZERO_DIVIDE

除数为零

 

第5章 oracle数据库的备份与恢复

5.1 恢复oracle中update或delete的数据

5.1.1 如果在很短的时间内,可以查询数据库中的versions,记录短时间内的employee表中的update、delete、insert的操作。(时间多长取决于数据库中的相关设置参数)

select versions_xid, versions_operation,
versions_starttime, versions_endtime from employee versions between timestamp
minvalue and maxvalue;

5.1.2 找到update的语句,查出对应的version_xid的值,然后查询flashback_transaction_query闪回事务查询表。

例如:versions_xid的值为'000A0019000214C3'

select 
*  from  flashback_transaction_query  where xid ='000A0019000214C3'

5.1.3 想取消update操作,在数据库中执行查询出来的UNDO-SQL字段中的SQL语句即可时间条件的查询,如下:

select  *
from flashback_transaction_query  where
table_name like 'emp%'

where commit_timestamp< to_date  ('2009-2-16 10:30:00','yyyy-mm-dd
hh24:mi:ss')

5.1.4 如果第二步没有查询出来,可以先查看目前的employee表的数据量是多少,以便和没有update之前的对比一下。

select count(*) from employee

5.1.5 可以产生一个表来备份update之前的闪回的数据(取决于数据库的闪回时间,updo的大小)

create table employee_copy

as

select * from employee as of  timestamp to_timestamp('2009-02-16
10:00:00','yyyy-mm-dd hh24:mi:ss')

5.1.6 查看在update之前的employee表 在update语句中的条件是否一样

(比如原来更新语句中的条件是e.block='0300100011000000240',更新了10条),现在查出来也是10条数据,可以把下面10条数据的id查找出来,然后在更新回去。

select 
*  from employee_copy  e 
where e.block='0300100011000000240';

5.1.7 查看employee的id

select count(*) from employee where report_id in (
'8a8881a71c9e53f5011ca74049d7001b', '5F3BA0EA14890024E0437F0000010024',
'5A6F193A11A820D8E0430A08012120D8', '56F9DFC764E0101AE0430A3E3D64101A',
'8a8881a71cd6ea28011cdf6c372d00a3', '8a8881a71df71207011dfc3071730276',
'8a8881a71df71207011dfc38012b0277', '8a8881a71df71207011dfc3f2e50027b',
'8a8881a71df71207011dfc0d5ef9022b', '5DA7E2D9FA2AF06AE0430A080121F06A')

5.1.8 更新回来原来的数据

update employee set block='0300100011000000240'
where report_id in

( '8a8881a71c9e53f5011ca74049d7001b',

'5F3BA0EA14890024E0437F0000010024',

'5A6F193A11A820D8E0430A08012120D8',

'56F9DFC764E0101AE0430A3E3D64101A',

'8a8881a71cd6ea28011cdf6c372d00a3',

'8a8881a71df71207011dfc3071730276',

'8a8881a71df71207011dfc38012b0277',

'8a8881a71df71207011dfc3f2e50027b',

'8a8881a71df71207011dfc0d5ef9022b',

'5DA7E2D9FA2AF06AE0430A080121F06A')

5.1.9 最后把备份的表删掉

drop table employee_employee_copy

5.2 oracle数据库备份

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。

https://www.cnblogs.com/ray-bk/p/7977873.html

5.2.1
 导出/导入(Export/Import)

利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。

1、 简单导出数据(Export)和导入数据(Import)

Oracle支持三种方式类型的输出:

(1)、表方式(T方式),将指定表的数据导出。

(2)、用户方式(U方式),将指定用户的所有对象及数据导出。

(3)、全库方式(Full方式),瘵数据库中的所有对象导出。

数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。

5.2.2 增量导出/导入

增量导出/导入

增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

1、增量导出包括三种类型:

(1)、“完全”增量导出(Complete)

即备份三个数据库,比如:

exp system/manager inctype=complete
file=040731.dmp

(2)、“增量型”增量导出

备份上一次备份后改变的数据,比如:

exp system/manager inctype=incremental
file=040731.dmp

(3)、“累积型”增量导出

累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:

exp system/manager inctype=cumulative
file=040731.dmp

如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:

2、增量导入三种类型

第一步:用命令CREATE
DATABASE重新生成数据库结构;

第二步:创建一个足够大的附加回滚。

第三步:完全增量导入A:

imp system/manager inctype=RESTORE FULL=y FILE=A

第四步:累计增量导入E:

imp system/manager inctype=RESTORE FULL=Y FILE=E

第五步:最近增量导入F:

imp system/manager inctype=RESTORE FULL=Y FILE=F

5.2.3 oracle数据库的冷备

1、oracle数据库冷备的优点:

是非常快速的备份方法(只需拷文件)

容易归档(简单拷贝即可)

容易恢复到某个时间点上(只需将文件再拷贝回去)

能与归档方法相结合,做数据库“最佳状态”的恢复。

低度维护,高度安全。

冷备案例:

(1) 关闭数据库

sqlplus /nolog

sql>connect /as sysdba

sql>shutdown normal;

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

sql>cp

(3) 重启Oracle数据库

sql>startup

5.2.4 oracle数据库的热备

1、oracle数据库热备的优点:

可在表空间或数据库文件级备份,备份的时间短。

2.
备份时数据库仍可使用。

3.
可达到秒级恢复(恢复到某一时间点上)。

4.
可对几乎所有数据库实体做恢复 。

5.
恢复是快速的,在大多数情况下可以再数据库仍工作时恢复。

热备份的不足是:

1.
不能出错,否则后果严重。

2.
若热备份不成功,所得结果不可用于时间点的恢复。

3.
因难于维护,所以要特别仔细小心,不允许“以失败告终”。

Oracle基础命令操作总结的更多相关文章

  1. Zookeeper系列一:Zookeeper基础命令操作

    有些事不是努力就可以改变的,五十块的人民币设计的再好看,也没有一百块的招人喜欢. 前言 由于公司年底要更换办公地点,所以最近投了一下简历,发现面试官现在很喜欢问dubbo.zookeeper和高并发等 ...

  2. Zookeeper基础命令操作

    转载链接:https://blog.csdn.net/dandandeshangni/article/details/80558383 安装参考链接https://blog.csdn.net/qiun ...

  3. 认识Influxdb时序数据库及Influxdb基础命令操作

    认识Influxdb时序数据库及Influxdb基础命令操作 一.什么是Influxdb,什么又是时序数据库 Influxdb是一个用于存储时间序列,事件和指标的开源数据库,由Go语言编写而成,无需外 ...

  4. Oracle基础--命令

    ====================== 基础命令====================== 1.su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界 ...

  5. linux基础的基础命令操作

    一.开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 操作:su - root 二.使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 操作:ctrl ...

  6. Mysql常用基础命令操作

    常见操作命令:1.连接Mysql (客户端工具NaviCat.phpMyAdmin.MySQL-Front)格式: mysql -h 主机地址 -u用户名 -p用户密码(1)连接到本机上的MYSQL. ...

  7. Linux基础命令操作

    显示日期与时间:date date +%Y/%m/%d date +%H:%M 显示日历:cal 显示一整年(cal 2009) 显示一年中的某一个月 (cal [[month]] year) 例如 ...

  8. oracle基础命令

    oracle使用步骤: 一.oracle安装 两个文件解压到同一文件夹,doc为说明/使用文档 二.oracle启动: 1.启动oracle:启动监听和自定义库 2.启动cmd->sqlplus ...

  9. Linux基础命令操作实例

    1.开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 2.使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 使用快捷键Ctrl+Alt+F2切换到终 ...

随机推荐

  1. mysql基础操作(二):简单查询DQL

    -- 1.查询所有字段 select * from student; -- 2.查询指定的字段 select id from student; select id, name from student ...

  2. ROS入门学习(基于Ubuntu16.04+kinetic)

    本文主要部分全部来源于ROS官网的Tutorials. Setup roscore # making sure that we have roscore running rosrun turtlesi ...

  3. 【WPF】 OxyPlot图表控件学习

    最近在学习OxyPlot图表控件,一些基本的学习心得,在这里记录一下,方便以后进行查找.   一.引用 OxyPlot控件可以直接在VS的 " Nuget " 里面下载   选择: ...

  4. Eclipse中安装配置Gradle

    Gradle是以Groovy语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. gradle对多工程的构建支持很出色,工程依赖是gradle的第一功能. gradle支 ...

  5. msyql redo log和binlog

    更新语句执行流程 下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: create table T(ID int primary key, c int); 如果要将 ID=2 这一行 ...

  6. 如何实现LRU缓存?

    面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...

  7. 窗口函数至排序——SQLServer2012可高用

    常用到的窗口函数 工作中要常对数据进行分析,分析前要对原始数据中找到想要的格式,数据原本存储的格式不一定时我们想要的,要在基础上进行一定的处理,下面介绍的几种方式是常用的数据排序的集中方式,包含 排名 ...

  8. Redis详解(三)——

    redis https://www.cnblogs.com/zhangyinhua/p/14504717.html

  9. Mysql - You can't specify target table '表名' for update in FROM clause 错误解决办法

    背景 在MySQL中,写SQL语句的时候 ,可能会遇到 You can't specify target table '表名' for update in FROM clause 这样的错误 错误含义 ...

  10. openswan一条隧道多保护子网配置

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.22 Copyright : 未经同意不得 ...