第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. linux 常用命令(三)——(centos7)MySql 5.7添加用户、删除用户与授权

    一.创建用户:以root用户登录到数据库进行用户创建 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 例如: CREATE US ...

  2. jwt三种方式

    package library.book.demo.config.loginconfig; import com.alibaba.fastjson.JSON; import com.sun.org.a ...

  3. 【曹工杂谈】Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗

    Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗 前奏 我们上篇文章,跟大家说了下,怎么调试maven插件的代码,注意,是插件的代码.插件,是要让主框架来执行的,主框架是谁呢,就是maven ...

  4. jenkins AWS CodeDeploy不停机部署

    此项目的特点是把Jenkins与CodeDeploy相结合做的CICD做的蓝绿发布,CI与CD 是分开的,CI构建完以后以BuildNumber的形式把war包存至AWS的S3桶中.同时在java项目 ...

  5. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  6. Mysql常用sql语句(15)- cross join 交叉连接

    测试必备的Mysql常用sql语句 https://www.cnblogs.com/poloyy/category/1683347.html 前言 交叉连接就是求多表之间的笛卡尔积 讲道理..这个我都 ...

  7. 通过JDK动态代理实现 Spring AOP

    1.新建一个目标类 接口:public interface IUserService //切面编程 public void addUser(); public void updateUser( ); ...

  8. JAVA反序列化的简单探究

    JAVA反序列化的简单探究 本文主要是探究,在反序列化过程中是怎么调用到readObject.readResolve.readExternal方法的问题 新建一个需要被序列化的类ObjectA,写入r ...

  9. 缓存一致性?get💡

    大家好,我是老三,今天又是被算法致郁的一天,写篇文章缓一缓. 这篇文章,我们来看看缓存一致性问题. 缓存一致性 我接下来会巴巴说一堆缓存一致性,但是-- 作为一名暴躁老哥,我先把结论撂这了! 缓存和数 ...

  10. 【第十二篇】- Git 服务器搭建之Spring Cloud直播商城 b2b2c电子商务技术总结

    Git 服务器搭建 上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,2019 年开始 Github 私有存储库也可以无限制使用. 这当然我们也可以自己搭建一台 Git 服 ...