文档库 最新最全的文档下载
当前位置:文档库 › Oracle恢复误删除数据,解除锁定的等SQL语句

Oracle恢复误删除数据,解除锁定的等SQL语句

Oracle恢复误删除数据,解除锁定的等SQL语句
Oracle恢复误删除数据,解除锁定的等SQL语句

注意:数据库版本是10g,不过大部分9g的也适用,闪回9g就没有.

1.曾经不小心把开发库的数据库表全部删除,当时吓的要死。结果找到下面的语句恢复到了1个小时之前的数据!很简单。

注意使用管理员登录系统:

select * from 表名as of timestamp sysdate-1/12 //查询两个小时前的某表数据!既然两小时以前的数据都得到了,继续怎么做,知道了吧。。

如果drop了表,怎么办??见下面:

drop table 表名;

数据库误删除表之后恢复:(绝对ok,我就做过这样的事情,汗)不过要记得删除了哪些表名。

flashback table 表名to before drop;

2.查询得到当前数据库中锁,以及解锁:

查锁

SELECT /*+ rule */ https://www.wendangku.net/doc/8414858435.html,ername,

decode(l.type,'TM','TABLE LOCK',

'TX','ROW LOCK',

NULL) LOCK_LEVEL,

o.owner,o.object_name,o.object_type,

s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser

FROM v$session s,v$lock l,dba_objects o

WHERE l.sid = s.sid

AND l.id1 = o.object_id(+)

AND https://www.wendangku.net/doc/8414858435.html,ername is NOT NULL;

解锁

alter system kill session 'sid,serial';

如果解不了。直接倒os下kill进程kill -9 spid

3.关于查询数据库用户,权限的相关语句:

Sql代码

1.查看所有用户:

select * from dba_user;

select * from all_users;

select * from user_users;

2.查看用户系统权限:

select * from dba_sys_privs;

select * from all_sys_privs;

select * from user_sys_privs;

3.查看用户对象权限:

select * from dba_tab_privs;

select * from all_tab_privs;

select * from user_tab_privs;

4.查看所有角色:

select * from dba_roles;

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

select * from dba_role_privs;

select * from user_role_privs;

4.几个经常用到的oracle视图:注意表名使用大写....................

Sql代码

1. 查询oracle中所有用户信息

select * from dba_user;

2. 只查询用户和密码

select username,password from dba_users;

3. 查询当前用户信息

select * from dba_ustats;

4. 查询用户可以访问的视图文本

select * from dba_varrays;

5. 查询数据库中所有视图的文本

select * from dba_views;

6.查询全部索引

select * from user_indexes;

查询全部表格

select * from user_tables;

查询全部约束

select * from user_constraints;

查询全部对象

select * from user_objects;

5.查看当前数据库中正在执行的语句,然后可以继续做很多很多事情,例如查询执行计划等等

Sql代码

(1).查看相关进程在数据库中的会话

Select a.sid,a.serial#,a.program, a.status ,

substr(a.machine,1,20), a.terminal,b.spid

from v$session a, v$process b

where a.paddr=b.addr

and b.spid = &spid;

(2).查看数据库中被锁住的对象和相关会话

select a.sid,a.serial#,https://www.wendangku.net/doc/8414858435.html,ername,a.program,

c.owner, c.object_name

from v$session a, v$locked_object b, all_objects c

where a.sid=b.session_id and

c.object_id = b.object_id;

(3).查看相关会话正在执行的SQL

select sql_text from v$sqlarea where address =

( select sql_address from v$session where sid = &sid );

6.查询表的结构:表名大写!!

select t.COLUMN_NAME,

t.DA TA_TYPE,

nvl(t.DATA_PRECISION, t.DA TA_LENGTH),

nvl(T.DATA_SCALE, 0),

https://www.wendangku.net/doc/8414858435.html,ments

from all_tab_columns t, user_col_comments c

whEre t.TABLE_NAME = c.table_name

and t.COLUMN_NAME = c.column_name

and t.TABLE_NAME = UPPER('OM_EMPLOYEE_T')

order by t.COLUMN_ID

7.行列互换:

Sql代码

建立一个例子表:

CREATE TABLE t_col_row(

ID INT,

c1 V ARCHAR2(10),

c2 V ARCHAR2(10),

c3 V ARCHAR2(10));

INSERT INTO t_col_row V ALUES (1, 'v11', 'v21', 'v31'); INSERT INTO t_col_row V ALUES (2, 'v12', 'v22', NULL); INSERT INTO t_col_row V ALUES (3, 'v13', NULL, 'v33'); INSERT INTO t_col_row V ALUES (4, NULL, 'v24', 'v34'); INSERT INTO t_col_row V ALUES (5, 'v15', NULL, NULL); INSERT INTO t_col_row V ALUES (6, NULL, NULL, 'v35'); INSERT INTO t_col_row V ALUES (7, NULL, NULL, NULL); COMMIT;

下面的是列转行:创建了一个视图

CREATE view v_row_col AS

SELECT id, 'c1' cn, c1 cv

FROM t_col_row

UNION ALL

SELECT id, 'c2' cn, c2 cv

FROM t_col_row

UNION ALL

SELECT id, 'c3' cn, c3 cv FROM t_col_row;

下面是创建了没有空值的一个竖表:

CREATE view v_row_col_notnull AS

SELECT id, 'c1' cn, c1 cv

FROM t_col_row

where c1 is not null

UNION ALL

SELECT id, 'c2' cn, c2 cv

FROM t_col_row

where c2 is not null

UNION ALL

SELECT id, 'c3' cn, c3 cv

FROM t_col_row

where c3 is not null;

8.下面可能是dba经常使用的oracle视图吧。呵呵

Sql代码

1.示例:已知hash_value:3111103299,查询sql语句:

select * from v$sqltext

where hashvalue='3111103299'

order by piece

2.查看消耗资源最多的SQL:

SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls

FROM V$SQLAREA

WHERE buffer_gets > 10000000OR disk_reads > 1000000

ORDERBY buffer_gets + 100 * disk_reads DESC;

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

SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls

FROM V$SQLAREA

WHERE hash_Value = 228801498AND address = hextoraw('CBD8E4B0');

4.查询sql语句的动态执行计划:

首先使用下面的语句找到语句的在执行计划中的address和hash_code SELECT sql_text, address, hash_value FROM v$sql t

where (sql_text like '%FUNCTION_T(表名大写!)%')

然后:

SELECT operation, options, object_name, cost FROM v$sql_plan

WHERE address = 'C00000016BD6D248' AND hash_value = 664376056;

5.查询oracle的版本:

select * from v$version;

6.查询数据库的一些参数:

select * from v$parameter

7.查找你的session信息

SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS

FROM V$SESSION WHERE audsid = userenv('SESSIONID');

8.当machine已知的情况下查找session

SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL

FROM V$SESSION

WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';

9.查找当前被某个指定session正在运行的sql语句。假设sessionID为100

select b.sql_text

from v$session a,v$sqlarea b

where a.sql_hashvalue=b.hash_value and a.sid=100

9.树形结构connect by 排序:

Sql代码

查询树形的数据结构,同时对一层里面的数据进行排序

SELECT last_name, employee_id, manager_id, LEVEL

FROM employees

START WITH employee_id = 100

CONNECT BY PRIOR employee_id = manager_id

ORDER SIBLINGS BY last_name;

下面是查询结果

LAST_NAME EMPLOYEE_ID MANAGER_ID LEVEL

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

King 100 1

Cambrault 148 100 2

Bates 172 148 3

Bloom 169 148 3

Fox 170 148 3

Kumar 173 148 3

Ozer 168 148 3

Smith 171 148 3

De Haan 102 100 2

Hunold 103 102 3

Austin 105 103 4

Ernst 104 103 4

Lorentz 107 103 4

Pataballa 106 103 4

Errazuriz 147 100 2

Ande 166 147 3

Banda 167 147 3

10.有时候写多了东西,居然还忘记最基本的sql语法,下面全部写出来,基本的oracle语句都在这里可以找到了。是很基础的语句!

Sql代码

1.在数据字典查询约束的相关信息:

SELECT constraint_name, constraint_type,search_condition

FROM user_constraints WHERE table_name = 'EMPLOYEES';

//这里的表名都是大写!

2对表结构进行说明:

desc Tablename

3查看用户下面有哪些表

select table_name from user_tables;

4查看约束在那个列上建立:

SELECT constraint_name, column_name

FROM user_cons_columns

WHERE table_name = 'EMPLOYEES';

10结合变量查找相关某个表中约束的相关列名:

select constraint_name,column_name from user_cons_columns where table_name = '&tablenam e'

12查询数据字典看中间的元素:

SELECT object_name, object_type

FROM user_objects

WHERE object_name LIKE 'EMP%'

OR object_name LIKE 'DEPT%'

14查询对象类型:

SELECT DISTINCT object_type FROM user_objects ;

17改变对象名:(表名,视图,序列)

rename emp to emp_newTable

18添加表的注释:

COMMENT ON TABLE employees IS 'Employee Information';

20查看视图结构:

describe view_name

23在数据字典中查看视图信息:

select viewe_name,text from user_views

25查看数据字典中的序列:

select * from user_sequences

33得到所有的时区名字信息:

select * from v$timezone_names

34显示对时区‘US/Eastern’的时区偏移量

select TZ_OFFSET('US/Eastern') from DUAL--dual英文意思是‘双重的’

显示当前会话时区中的当前日期和时间:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';--修改显示时间的方式的设置

ALTER SESSION SET TIME_ZONE = '-5:0';--修改时区

SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;--真正有用的语句!

SELECT CURRENT_TIMESTAMP FROM DUAL;--返回的时间是当前日期和时间,含有时区

SELECT CURRENT_TIMESTAMP FROM DUAL;--返回的时间是当前日期和时间,不含有时区!!!

35显示数据库时区和会话时区的值:

select datimezone,sessiontimezone from dual;

13普通的建表语句:

CREATE TABLE dept

(deptno NUMBER(2),

dname VARCHAR2(14),

loc V ARCHAR2(13));

15使用子查询建立表:

CREATE TABLE dept80

AS SELECT employee_id, last_name,

salary*12 ANNSAL,

hire_date FROM employees WHERE department_id = 80;

6添加列:// alter table EMP add column (dept_id number(7));错误!!

alter table EMP add (dept_id number(7));

7删除一列:

alter table emp drop column dept_id;

8添加列名同时和约束:

alter table EMP add (dept_id number(7)

constraint my_emp_dept_id_fk references dept(ID));

9改变列://注意约束不能够修改的!!

alter table dept80 modify(last_name varchar2(30));//这里使用的是modify而不是alter!

24增加一行:

insert into table_name values();

5添加主键:

alter Table EMP add constraint my_emp_id_pk primary key (ID);

11添加一个有check约束的新列:

alter table EMP

add (COMMISSION number(2) constraint emp_commission_ck check(commission>0)) 16删除表:

drop table emp;

19创建视图:

CREATE VIEW empvu80

AS SELECT employee_id, last_name, salary

FROM employees WHERE department_id = 80;

21删除视图:

drop view view_name

22找到工资最高的5个人。(top-n分析)(行内视图)

select rownum,employee_id from (select employee_id,salary from

employees order by salary desc)

where rownum<5;

26建立同义词:

create synonym 同义词名 for 原来的名字

或者 create public synonym 同义词名 for 原来的名字

27建立序列:(注意,这里并没有出现说是哪个表里面的序列!!)

CREATE SEQUENCE dept_deptid_seq

INCREMENT BY 10

START WITH 120

MAXV ALUE 9999

NOCACHE

NOCYCLE

28使用序列:

insert into dept(ID,NAME) values(DEPT_ID_SEQ.nextval,'Administration');

29建立索引://默认就是nonunique索引,除非使用了关键字:unique

CREATE INDEX emp_last_name_idx ON employees(last_name);

30建立用户:(可能有错,详细查看帮助)

create user username(用户名)

identified by oracle(密码)

default tablespace data01(表空间名//默认存在system表空间里面)

quota 10M(设置大小,最大为unlimited) on 表空间名//必须分配配额!

31创建角色:create ROLE manager

赋予角色权限:grant create table,create view to manage

赋予用户角色:grant manager to DENHAAN,KOCHHAR( 两个用户)

32分配权限:

GRANT update (department_name, location_id)

ON departments

TO scott, manager;

回收权限

REVOKE select, insert

ON departments

FROM scott;

36从时间中提取年,月,日:使用函数extract

select extract(year from sysdate) year,extract(month from sysdate),

extract(day from sysdate) from dual;

37使用函数得到数月之后的日期:to_yminterval(‘01-02’)表示加上1年2月,不能够到天!! select hire_date,hire_date +to_yminterval('01-02') as hire_date_new from employees where d epartment_id=20

得到多少天之后的日期:直接日期加数字!

select hire_date +3 from employees where department_id=20

38一般的时间函数:

MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')--两个日期之间的月数,返回一个浮点数

ADD_MONTHS ('11-JAN-94',6)--添加月数

NEXT_DAY ('01-SEP-95','FRIDAY') --下一个星期五的日期

LAST_DAY('01-FEB-95')--当月的最后一天!

ROUND(SYSDA TE,'MONTH') --四舍五入月

ROUND(SYSDA TE ,'YEAR') --四舍五入年

TRUNC(SYSDATE ,'MONTH') --阶段月

TRUNC(SYSDATE ,'YEAR') --截断年

39 group语句:和高级的应用语句:

SELECT department_id, job_id, SUM(salary), COUNT(employee_id) FROM employee s

GROUP BY department_id, job_id ;

使用having进行约束:

1.group by rollup:对n列组合得到n+1种情况

SELECT department_id, job_id, SUM(salary) FROM employees WHERE depart ment_id < 60 GROUP BY ROLLUP(department_id, job_id);

2.group by cube:得到2的n次方种情况

SELECT department_id, job_id, SUM(salary) FROM employees WHERE department _id < 60 GROUP BY CUBE (department_id, job_id) ;

3.使用grouping得到一行中构成列的情况,只是返回1和0:是空的话就返回1,否则返回0(注意不要弄反了!)

SELECT department_id DEPTID, job_id JOB, SUM(salary), GROUPING(department_i d) GRP_DEPT, GROUPING(job_id) GRP_JOB

FROM employees WHERE department_id < 50 GROUP BY ROLLUP(department _id, job_id);

4.grouping sets:根据需要得到制定的组合情况

SELECT department_id, job_id, manager_id,avg(salary) FROM employees GROUP BY GROUPING SETS ((department_id,job_id), (job_id,manager_id));

40from中使用子查询:返回每个部门中大于改部门平均工资的与员工信息

SELECT https://www.wendangku.net/doc/8414858435.html,st_name, a.salary, a.department_id, b.salavg FROM employees a,--下面的地方就是子查询了,主要返回的是一组数据!

(SELECT department_id, A VG(salary) salavg FROM employees GROUP BY departm ent_id) b

WHERE a.department_id = b.department_id

AND a.salary > b.salavg;

41exists语句的使用:

SELECT employee_id, last_name, job_id, department_id

FROM employees outer--下面的 exists里面的select选择出来的是随便的一个字符或者数字都可以

WHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.employ ee_id);

42厉害的with语句:

WITH

dept_costs AS (--定义了一个临时的表

SELECT d.department_name, SUM(e.salary) AS dept_total--其间定义了一个临时的列dept_total

FROM employees e, departments d

WHERE e.department_id = d.department_id

GROUP BY d.department_name),/*注意这里有逗号*/

avg_cost AS (

SELECT SUM(dept_total)/COUNT(*) AS dept_avg

FROM dept_costs)--这里的第二张临时表里面就引用了前面定义的临时表和之间的列!

SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_co st) ORDER BY department_name;---最后的查询语句中使用了前面的临时表

43遍历树:

SELECT employee_id, last_name, job_id, manager_id

FROM employees

START WITH employee_id = 101

CONNECT BY PRIOR manager_id = employee_id ;--自底向上的遍历树。

44.更新语句

UPDATE employees SET

job_id = 'SA_MAN', salary = salary + 1000, department_id = 120

WHERE first_name||' '||last_name = 'Douglas Grant';

UPDATE TABLE (SELECT projs

FROM dept d WHERE d.dno = 123) p

SET p.budgets = p.budgets + 1

WHERE p.pno IN (123, 456);

11.导入导出dmp文件:

imp 用户名/密码@数据库ignore=y file=备份文件log=D:\DBtest\db_bak\imp.log

exp system/manager@TEST file=d:\daochu.dmp full=y

oracle 备份恢复语句整理(最全)

Oracle备份恢复场景总结 一、数据文件、表空间恢复 1、数据库文件恢复 1>场景一: 问题描述: test.dbf丢失,有RMAN备份。 重启报错: Startup; ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: '/oracle/app/oracle/oradata/orcl/test01.dbf' run{ startup mount; allocate channel ch00 type 'SBT_TAPE'; restore datafile 5; recoverdatafile 5; alter database open; release channel ch00; }

2>场景二 问题描述: 模拟test表空间损坏,删除数据文件(恢复到新目录) 旧目录:/oracle/app/oracle/oradata 新目录: /home/oracle run{ allocate channel ch00 type 'SBT_TAPE'; sql 'alter database datafile 5 offline'; setnewname for datafile 5 to '/home/oracle/test01.dbf'; restoredatafile 5; switchdatafile 5; recoverdatafile 5; sql 'alter database datafile 4 online'; release channel ch00; } 说明: set newname for 告诉RMAN 还原数据文件的新位置在哪里。这个命令在restore 前出现。 switch datafile更新controlfile,记录这个新位置。这个命令要在recover 前出现

ORACLE常用SQL语句大全

ORACLE常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..) 根据已有的表创建新表: A:select * into table_new from table_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle> 5、说明:删除表 drop table tablename

6、说明:增加一个列,删除一个列 A:alter table tabname add column col type B:alter table tabname drop column colname 注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、添加主键: Alter table tabname add primary key(col) 删除主键: Alter table tabname drop primary key(col) 8、创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、创建视图:create view viewname as select statement 删除视图:drop view viewname 10、几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、几个高级查询运算词 A:UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B:EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C:INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、使用外连接

ORACLE数据备份与数据恢复方案

O R A C L E数据备份与数据恢 复方案 Prepared on 24 November 2020

摘要 结合金华电信IT系统目前正在实施的备份与恢复策略,重点介绍电信业务计算机管理系统(简称97系统)和营销支撑系统的ORALCE数据库备份和恢复方案。 Oracle数据库有三种标准的备份方法,它们分别是导出/导入 (EXP/IMP)、热备份和冷备份。要实现简单导出数据(Export)和导入数据(Import),增量导出/导入的按设定日期自动备份,可考虑,将该部分功能开发成可执行程序,然后结合操作系统整合的任务计划,实现特定时间符合备份规划的备份应用程序的运行,实现数据库的本级备份,结合ftp简单开发,实现多服务器的数据更新同步,实现数据备份的异地自动备份。 关键字:数据库远程异地集中备份 目录

一、前言 目前,数据已成为信息系统的基础核心和重要资源,同时也是各单位的宝贵财富,数据的丢失将导致直接经济损失和用户数据的丢失,严重影响对社会提供正常的服务。另一方面,随着信息技术的迅猛发展和广泛应用,业务数据还将会随业务的开展而快速增加。但由于系统故障,数据库有时可能遭到破坏,这时如何尽快恢复数据就成为当务之急。如做了备份,恢复数据就显得很容易。由此可见,做好数据库的备份至关重要。因此,建立一个满足当前和将来的数据备份需求的备份系统是必不可少的。传统的数据备份方式主要采用主机内置或外置的磁带机对数据进行冷备份,这种方式在数据量不大、操作系统种类单一、服务器数量有限的情况下,不失为一种既经济又简明的备份手段。但随着计算机规模的扩大,数据量几何级的增长以及分布式网络环境的兴起,将越来越多的业务分布在不同的机器、不同的操作平台上,这种单机的人工冷备份方式越来越不适应当今分布式网络环境。 因此迫切需要建立一个集中的、自动在线的企业级备份系统。备份的内容应当包括基于业务的业务数据,又包括IT系统中重要的日志文件、参数文件、配置文件、控制文件等。本文以ORACLE数据库为例,结合金华电信的几个相关业务系统目前正在实施的备份方案,介绍ORACLE数据库的备份与恢复。 二、金华电信ORACLE数据库的备份与恢复方案 由于金华电信IT系统以前只采用逻辑备份方式进行数据库备份,速度较慢并且数据存储管理都很分散,甚至出现备份数据不完整的现象。为了提高备份数据的效率,提供可靠的数据备份,完善备份系统,保证备份数据的完整性,降低数据备份对网络和服务器的影响,对每个IT系统的备份数据进行集中管理,我们对备份工作进行了改进,将逻辑备份与物理备份相结合,在远程建立了一个异地集中、自动在线的备份系统即网络存储管理系统。(这里用到的物理备份指热备份)其具备的主要功能如下:(1)集中式管理 :网络存储备份管理系统对整个网络的数据进行管理。利用集中式管理工具的帮助,系统管理员可对全网的备份策略进行统一管理,备份服务器可以监控所有机器的备份作业,也可以修改备份策略,并可即时浏览所有目录。所有数据可以备份到同备份服

SQL语句的添加、删除、修改

SQL语句的添加、删除、修改 SQL语句的添加、删除、修改虽然有如下很多种方法,但在使用过程中还是不够用,不知是否有高手把更多灵活的使用方法贡献出来? {select * from 数据表 where 字段名 between 值1 and 值2 insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …) update 数据表 set 字段名=字段值 where 条件表达式 delete from 数据表 where 条件表达式} 添加、删除、修改使用db.Execute(Sql)命令执行操作 ╔--------------------╗ ☆数据记录筛选☆ ╚--------------------╝ 注意:单双引号的用法可能有误(没有测式) Sql = "Select Distinct 字段名 From 数据表" Distinct函数,查询数据库存表内不重复的记录 Sql = "Select Count(*) From 数据表 where 字段名1>#18:0:0# and 字段名1< #19:00# " count函数,查询数库表内有多少条记录,“字段名1”是指同一字段 例: set rs=conn.execute("select count(id) as idnum from news") response.write rs("idnum") sql="select * from 数据表 where 字段名 between 值1 and 值2" Sql="select * from 数据表where 字段名between #2003-8-10# and #2003-8-12#" 在日期类数值为2003-8-10 19:55:08 的字段里查找2003-8-10至2003-8-12的所有记录,而不管是几点几分。 select * from tb_name where datetime between #2003-8-10# and #2003-8-12# 字段里面的数据格式为:2003-8-10 19:55:08,通过sql查出2003-8-10至2003-8-12的所有纪录,而不管是几点几分。

oracle数据库恢复方案

目录 数据库恢复方案 (1) 文档控制 (1) 一、相关概念 (3) 1,恢复的两个阶段 (3) 2,Oracle实例启动的三个阶段 (3) 3,RMAN信息的保存位置 (3) 二、完全恢复 (3) (一) 控制文件 (3) 1) 丢失部分控制文件: (3) 2) 丢失全部控制文件 (3) (二) 重做日志文件 (4) 1) 非当前使用的重做日志文件: (4)

2) 当前使用的重做日志文件(未归档): (4) (三) 数据文件 (4) 1) 无归档模式下的完全恢复 (4) 2) 归档模式下的完全恢复 (5) 三、不完全恢复 (6) (一) 基于SCN的不完全恢复 (6) 1) 准备工作 (6) 2) 使用RMAN进行恢复 (7) (二) 基于时间点的不完全恢复 (8) 1) 准备工作 (8) 2) 使用RMAN进行恢复 (8) 四、高级篇 (9)

(一) 使用RMAN进行异机同目录 (9) 1) 准备工作 (9) 2) 通过RMAN进行异机恢复 (10) (二)使用RMAN进行异机异目录 (11) 1) 准备工作 (11) 2) 通过RMAN进行异机恢复 (11) (三)使用RMAN进行在线数据块恢复 (14) 一、相关概念 1,恢复的两个阶段 数据库无论采取哪种方式进行恢复都分为Restore和Recover两个步骤。Restore(还原):把控制文件、重做日志文件和数据文件还原到正确位置。Recover(恢复):恢复还原后的数据文件,使数据库达到一致状态。

2,Oracle实例启动的三个阶段 Oracle实例启动经过三个阶段: l NOMOUNT(未装载):读入参数文件,验证参数文件中的目录是否存在。 l MOUNT(装载):读入参数文件指定位置的控制文件。 l OPEN(打开):验证控制文件中指定的重做日志文件和数据文件是否正确、数据文件是否一致,然后读入数据文件中的数据。 所以按照如下顺序使数据库正确打开。 1) SHUTDOWN(关闭)状态下,确保参数文件指定的文件夹存在,启动到NOMMUNT 状态。 2) NOMOUNT状态下,保证控制文件的位置和命名与参数文件中相同,控制文件中指定的重做日志文件和数据文件存在,然后启动到MOUNT状态。 3) MOUNT状态下,执行RMAN还原和恢复操作。

彻底删除oracle重新安装

彻底删除oracle,重新安装 下载vistar版本,解压,搜索refhost.xml文件,修改之。 当前任何版本的ORACLE客户端在任何版本的WINDOWS7上都不能正常完成安装。 主要是因为ORACLE安装的先决条件里操作系统版本不符合,但是这个疑问可以修改refhost.xml 处理,具体是在refhost.xml中添加 <!--Microsoft Windows 7--> <OPERATING_SYSTEM> <VERSION VALUE="6.1"/> </OPERATING_SYSTEM> 即可 -------------------------------------------------------------------- 彻底删除oracle: 1、开始->设置->控制面板->管理工具->服务停止所有Oracle服务。 2、开始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer 卸装所有Oracle产品,但Universal Installer本身不能被删除 5、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 6、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口。 7、运行refedit,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口。 8、开始->设置->控制面板->系统->高级->环境变量删除环境变量CLASSPATH和PATH中有关Oracle的设定 9、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标 10、删除\Program Files\Oracle目录 11、重新启动计算机,重起后才能完全删除Oracle所在目录(到这基本可以安装) 12、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,并从Windows 2000目录(一般为C:\WINNT)下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 13、WIN.INI文件中若有[ORACLE]的标记段,删除该段 14、如有必要,删除所有Oracle相关的ODBC的DSN 15、到事件查看器中,删除Oracle相关的日志说明:如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。 ------------------------------------------------------------------

数据库增删改查基本语句

数据库增删改查基本语句 adoquery1.Fielddefs[1].Name; 字段名 dbgrid1.columns[0].width:=10; dbgrid的字段宽度 adoquery1.Fields[i].DataType=ftString 字段类型 update jb_spzl set kp_item_name=upper(kp_item_name) 修改数据库表中某一列为大写select * from master.dbo.sysobjects ,jm_https://www.wendangku.net/doc/8414858435.html,ers 多库查询 adotable1.sort:='字段名称ASC' adotable排序 SQL常用语句一览 sp_password null,'新密码','sa' 修改数据库密码 (1)数据记录筛选: sql="select * from 数据表where 字段名=字段值orderby 字段名[desc] " sql="select * from 数据表where 字段名like '%字段值%' orderby 字段名[desc]" sql="select top10 * from 数据表where 字段名orderby 字段名[desc]" sql="select * from 数据表where 字段名in('值1','值2','值3')" sql="select * from 数据表where 字段名between 值1 and 值2" (2)更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2……字段n=值n where 条件表达式" (3)删除数据记录: sql="delete from 数据表where 条件表达式" sql="delete from 数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)" sql="insert into 目标数据表select * from 源数据表"(把源数据表的记录添加到目标数据表)

Oracle Export/Import数据库备份与恢复的三种方法

Oracle数据库备份与恢复的三种方法 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。 一、导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。 1、简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的输出: (1)、表方式(T方式),将指定表的数据导出。 (2)、用户方式(U方式),将指定用户的所有对象及数据导出。 (3)、全库方式(Full方式),瘵数据库中的所有对象导出。 数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。 2、增量导出/导入 增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。 增量导出包括三种类型: (1)、“完全”增量导出(Complete) 即备份三个数据库,比如: exp system/manager inctype=complete file=040731.dmp (2)、“增量型”增量导出 备份上一次备份后改变的数据,比如: exp system/manager inctype=incremental file=040731.dmp

oracle 如何删除被误删物理文件的表空间

oracle 如何删除被误删物理文件的表空间.txt为什么我们在讲故事的时候总要加上从前?开了一夏的花,终落得粉身碎骨,却还笑着说意义。oracle 如何删除被误删物理文件的表空间.txt如果有来生,要做一棵树,站成永恒,没有悲伤的姿势。一半在土里安详,一半在风里飞扬,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找。如何删除alter database ... offline drop掉文件的表空间? QL> connect / as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 336662768 bytes Fixed Size 450800 bytes Variable Size 117440512 bytes Database Buffers 218103808 bytes Redo Buffers 667648 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: '/home/oracle/oradata/esal/ts_cybercafe01.dbf' SQL> alter tablespace cybercafe offline; alter tablespace cybercafe offline * ERROR at line 1: ORA-01109: database not open SQL> alter database datafile '/home/oracle/oradata/esal/ts_cybercafe01.dbf' offline drop; Database altered. SQL> alter database open; Database altered. //如果还提示文件不存在的话,那就继续执行datafile的drop命令,直到数据库可以open 为止; SQL> select * from v$tablespace; TS# NAME INC ---------- ------------------------------ ---

SQL数据库中的增删改查总结1

一、增:有2种方法 1.使用insert插入单行数据: 语法:insert [into]<表名> [列名] values <列值> 例:insert into Strdents (姓名,性别,出生日期) values ('邢金聪','男','1990/6/15') 注意:如果省略表名,将依次插入所有列 2.使用insert,select语句将现有表中的数据添加到已有的新表中 语法:insert into <已有的新表> <列名> select <原表列名> from <原表名> 例:insert into addressList ('姓名','地址','电子邮件')selectname,address,email from Strdents 注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致 二、删:有2中方法 1.使用delete删除数据某些数据 语法:delete from <表名> [where <删除条件>] 例:delete from awhere name='邢金聪'(删除表a中列值为邢金聪的行) 注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名 2.使用truncate table 删除整个表的数据

语法:truncate table<表名> 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 三、改 使用update更新修改数据 语法:update <表名> set <列名=更新值> [where <更新条件>] 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 四、查 1.普通查询 语法:select <列名> from <表名> [where <查询条件表达试>] [order by<排序的列 名>[asc或desc]] 1).查询所有数据行和列 例:select * from a 说明:查询a表中所有行和 2).查询部分行列--条件查询 例:select i,j,kfrom a where f=5 说明:查询表a中f=5的所有行,并显示i,j,k3列

Oracle数据库恢复

Oracle 数据库恢复 一、停止ORACLE数据库 用oracle用户登录,用sqlplus的sysdba用户登录,执行shutdown immediate oracle@JSBC-SIHUA-DB01:~> sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on Mon Feb 6 14:02:45 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> conn /as sysdba Connected. SQL> shutdown immediate SQL>quit 停止监听 oracle@JSBC-SIHUA-DB01:~> lsnrctl stop oracle@JSBC-SIHUA-DB01:~> ps -ef |grep ora root 4655 4524 0 Nov11 ? 00:00:48 hald-addon-storage: polling /dev/sr0 (every 16 sec) root 42514 42162 0 11:40 pts/0 00:00:00 su - oracle oracle 42515 42514 0 11:40 pts/0 00:00:00 -bash root 42853 42815 0 12:02 pts/2 00:00:00 su - oracle oracle 42854 42853 0 12:02 pts/2 00:00:00 -bash root 42924 42889 0 12:03 pts/1 00:00:00 su - oracle oracle 42925 42924 0 12:03 pts/1 00:00:00 -bash oracle 42975 42854 0 12:09 pts/2 00:00:00 ps -ef oracle 42976 42854 0 12:09 pts/2 00:00:00 grep ora 二、数据库备份 #root用户,创建sihua.bak目录 JSBC-SIHUA-DB01:/oradata # mkdir sihua.bak JSBC-SIHUA-DB01:/oradata # chown oracle:dba /oradata/sihua.bak JSBC-SIHUA-DB01:/oradata # ll total 24 drwx------ 2 root root 16384 Sep 16 11:53 lost+found drwxr-x--- 4 oracle dba 4096 Nov 8 14:16 sihua drwxr-xr-x 2 oracle dba 4096 Nov 28 12:15 sihua.bak #oracle用户 JSBC-SIHUA-DB01:/oradata # su - oracle oracle@JSBC-SIHUA-DB01:~> cd /oradata oracle@JSBC-SIHUA-DB01:/oradata> cp -r sihua sihua.bak oracle@JSBC-SIHUA-DB01:/oradata> cd sihua.bak/ oracle@JSBC-SIHUA-DB01:/oradata/sihua.bak> cd sihua/

oracle 经典SQL语句大全

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1

关于数据库删除表的SQL语句的区别

数据库中的有关表删除的SQL关键字有drop,delete以及truncate三个。 它们的SQL语句格式如下:(假如表名为Table_name) drop table Table_name; --------------------完全删除表 delete Table_name;-----------------删除表内数据,保留表结构 truncate table Table_name;-----------------完全删除表内数据,保留表结构delete from Table_name where 条件;-------------------------------删除相关数据下面举例说明它们的区别: 首先,创建一个表Users create table Users( id int identity(1,1), name varchar(20) ) 执行;再往表内插入数据: insert into Users values('A'); insert into Users(name) values('B'); 执行;此时select*from Users; 结果如下: ①如果执行删除语句: delete Users; select*from Users; 结果是 此时再插入数据: insert into Users(name) values('CC'); select*from Users; 结果是: ②如果执行删除语句: truncate table Users; select*from Users; 结果是:

此时再插入数据: insert into Users(name) values('CC'); select*from Users; 结果是: ③如果执行删除语句: drop table Users; 则完全删除表,此时无论执行select*from Users;还是insert into Users(name) values('CC'); 都会提示表Users无效

Oracle删除表的几种方法

Oracle删除表的几种方法 2010年07月27日星期二 13:07 引言: drop table books;的指令会将表放到回收站里, 用 flashback table "BIN$1Oiy3qm/QJubov1BwBUOgw==$0" to before drop; 就能恢复。 删除表: drop table books purge;是绕过回收站,彻底删除 建议你先 purge recyclebin; 清除当前用户的回收站,不会影响其他用户的回收站 或者 purge table 表名; 清除回收站内指定的表 正文: 删除表(记录和结构)的语名delete ———— truncate ————drop DELETE (删除数据表里记录的语句) DELETE FROM表名 WHERE 条件; 注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused. 如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间 TRUNCATE TABLE 表名; 此操作不可回退. 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 注意:这里说的delete是指不带where子句的delete语句 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不 及 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够 大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 oracle中删除表中的一列语句 alter table 表名 drop colum 列名

SQL语句创建数据库及修改、删除数据库

使用SQL语句: CREATE DATABASE语句创建数据库 CREATE DATABASE database_name [ON [PRIMARY] [ [ ,...n] [ , [ ,...n ] ] [LOG ON { [ ,...n ] } ] ::= { ( NAME=logical_file_name , FILENAME = 'os_file_name' [ SIZE=size [KB|MB|GB|TB] ] [ MAXSIZE={max_size [KB|MB|GB|TB] | UNLIMITED } ] [FILEGROWTH=growth_increment[KB|MB|GB|TB|% ] ] ) [ ,...n ] } ::= { FILEGROUP filegroup_name [ ,...n ] } T-SQL语法说明: “[ ]”中的内容表示可以省略,省略时系统取默认值。 “{ }[ ,…n ]”表示花括号中的内容可以重复书写n次,必须用逗号隔开。“|”表示相邻前后两项只能任取一项。 一条语句可以分成多行书写,但多条语句不允许写在一行。 CREATE DATABASE 数据库名 [ ON [PRIMARY] { ( [NAME=数据文件的逻辑名称,] FILENAME=‘数据文件的物理名称’, [SIZE=数据文件的初始大小[ MB(默认) | KB | GB ] , ] [MAXSIZE={ 数据文件的最大容量[ MB | KB | GB] |UNLIMITED(不受限制) } ,] [FILEGROWTH=数据文件的增长量[ MB | KB | GB | % ] ] ) } [ , …n ]

实验8 Oracle数据库备份与恢复

实验8 Oracle数据库备份与恢复 1 实验目的 (1)掌握Oracle数据库各种物理备份方法。 (2)掌握Oracle数据库各种物理恢复方法。 (3)掌握利用RMAN工具进行数据库的备份与恢复。 (4)掌握数据的导入与导出操作。 2 实验要求 (1)对BOOKSALES数据库进行一次冷备份。 (2)对BOOKSALES数据库进行一次热备份。 (3)利用RMAN工具对BOOKSALES数据库的数据文件、表空间、控制文件、初始化参数文件、 归档日志文件进行备份。 (4)利用热备份恢复数据库。 (5)利用RMAN备份恢复数据库。 (6)利用备份进行数据库的不完全恢复。 3 实验步骤 (1)关闭BOOKSALES数据库,进行一次完全冷备份。 select file_name from dba_data_files; select member from v$logfile; select value from v$parameter where name='control_files';

(2)启动数据库后,在数据库中创建一个名为cold表,并插入数据,以改变数据库的状态。 CREATE TABLE COLD( ID NUMBER PRIMARY KEY, NAME VARCHAR2(25) );

(3)利用数据库冷备份恢复BOOKSALES数据库到备份时刻的状态并查看恢复后是否存在cold表。 (4)将BOOKSALES数据库设置为归档模式。 shutdown immediate 正常关闭数据 startup mount;将数据库启动到mount状态 3)、关闭flash闪回数据库模式,如果不关闭的话,在后面关闭归档日志的时候就会出现讨厌的ora-38774错误。 alter database flashback off alter database archivelog;发出设置归档模式的命令 alter database open;打开数据库 再次正常关闭数据库,并备份所有的数据文件和控制文件 archive log list;在将数据库设置为归档模式后,可以执行此命令进行确认 Database log mode 为Archive Mode说明当前的数据库为归档模式 Automatic archival为Enable说明启动了自动归档。

Oracle误删数据的恢复

有很多原因导致了数据记录的误删,怎样恢复误删的记录呢?先来看看这个概念: SCN(系统改变号),它的英文全拼为:System Change Number ,它是数据库中非常重要的一个数据结构。 SCN提供了Oracle的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至关重要的 注释:Oracle仅根据 SCN 执行恢复。 它定义了数据库在某个确切时刻提交的版本。在事物提交时,它被赋予一个唯一的标示事物的SCN 。一些人认为 SCN 是指, System Commit Number ,而通常 SCN 在提交时才变化,所以很多情况下, 这两个名词经常被交替使用。 究竟是哪个词其实对我们来说并不是最重要的,重要的是我们知道 SCN 是Oracle 内部的时钟机制, Oracle 通过 SCN 来维护数据库的一致性,并通过SCN 实施 Oracle 至关重要的恢复机制。 具体执行流程我们可从以下几个示例图中体会; 1.原表记录 $ sqlplus eygle/eygle SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:04 2005 Copyright (c) 1982, 2004, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL>select count(*) from t1; COUNT(*) ---------- 9318 2.误删除所有记录 并且提交更改。

相关文档
相关文档 最新文档