oracle删除表中某一行时报错,Oracle常用操作

本文详细介绍Oracle数据库的管理操作,包括用户、表空间的创建与删除,数据的导入导出流程,以及如何通过多种方法恢复误删的数据。提供实用的SQL命令与步骤指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户=商家 表=商品 表空间=仓库 1个商家能有很多商品,1个商品只能属于一个商家 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B 仓库不属于任何商家 商家都有一个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中 oracle中用户的所有数据都是存放在表空间中的,很多个用户可以共用一个表空间,也可以指定一个用户只用某一个表空间。 表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间; 用户:创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象; 表:是数据记录的集合; 创建过程: 表空间—>用户—>表; 所属关系: 表空间 包含 用户 包含 表;

以system用户登录,查找需要删除的用户:

--查找用户

select *from dba_users;

--查找工作空间的路径 select * from dba_data_files;

--删除用户 drop user 用户名称 cascade; --删除表空间 drop tablespace 表空间名称 including contents and datafiles cascade constraint;

例如:删除用户名成为LYK,表空间名称为LYK

--删除用户,及级联关系也删除掉 drop user LYK cascade; --删除表空间,及对应的表空间文件也删除掉 drop tablespace LYK including contents and datafiles cascade constraint;

/*第1步:创建ODPS数据表空间 / create tablespace ODPS logging datafile '/home/oracle/tablespace_dir/ODPS.dbf' size 100m autoextend on next 50m maxsize 20480m extent management local; /第2步:创建global用户并指定表空间 */ create user global identified by global default tablespace ODPS temporary tablespace temp profile default;

/*第3步:给global用户授予权限 */ grant connect,resource to global; grant dba to global;

/第4步:远程导入dmp文件/ cd /d D:\oraclexe\app\oracle\product\11.2.0\server\bin

imp global/global@192.168.0.1:1521/wzhorcl file=G:\global.dmp full=y

/第5步:给ydbggl用户授权访问global用户下的资源/ select 'GRANT SELECT ON global.'||object_name||' to ydbggl;' from dba_objects where owner='GLOBAL' and object_type='TABLE';

select * from user_constraints c where c.table_name='表名';

alter table 表名 disable constraint 约束名 CASCADE;

drop table 表名 cascade constraints;

问题2:删除表空间期间遭遇 ORA-02429

对于ORA-02429这个错误,MOS文档的描述也很清楚: Drop Tablespace Failed with ORA-02429: cannot drop index used for enforcement of unique/primary key (文档 ID 1918060.1)

现象:

删除表空间失败,伴随下面的错误:

SQL> DROP TABLESPACE REP_DATA INCLUDING CONTENTS AND DATAFILES;

DROP TABLESPACE REP_DATA INCLUDING CONTENTS AND DATAFILES

*ERRORat line 1:

ORA-00604: erroroccurred at recursive SQL level 1

ORA-02429: cannot drop index used forenforcement ofunique/primary key

解决方法:

Find the constraint name for the unique/primary key, disable the constraint and drop the tablespace again. 找到那些惟一/主键约束名,禁用这些约束然后再次删除表空间。

Steps:

=====1) Execute below query to find the constraint name:

执行下面的查询来找到约束名:

SQL> select owner, constraint_name,table_name,index_owner,index_namefrom dba_constraintswhere(index_owner,index_name) in (selectowner,index_name from dba_indexeswhere tablespace_name='');

Disable the constraint:

禁用约束:

SQL> ALTER TABLE DISABLE CONSTRAINT ;

Drop the tablespace:

删除表空间:

SQL> DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES;

Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)

2017-12-13 23:43:21 闲了么事干 阅读数 27880更多

分类专栏: 其他

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

前提:在CMD 命令下

导出命令:exp 用户名/密码@数据库 owner=用户名 file=文件存储路径(如:F:\abcd.dmp)

测试截图:exp ZM/sql123@ORCL owner=ZM file=F\abcd.dmp

[图片上传失败...(image-6aee4-1609396517256)]

导入命令:imp 用户名/密码@数据库 fromuser=用户名 touser=用户名 file=d:\cu.dmp ignore=y

imp:命令类型

cu/mycu@db:导入的数据库登陆(用户名/密码@数据库)

fromuser:文件的指定用户

touser:指定导入到当前登录的数据库某个用户

file:需要导入的数据文件

ignore:是否忽略创建错误

测试截图:imp ZM/sql123@ORCL fromuser=ZM touser=SZZM file=F:\test.dmp ignore=y

[图片上传失败...(image-8130b4-1609396517256)]

基本语法和实例: 1、EXP: 有三种主要的方式(完全、用户、表) 1、完全: EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 如果要执行完全导出,必须具有特殊的权限 2、用户模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC 这样用户SONIC的所有对象被输出到文件中。 3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导出 2、IMP: 具有三种模式(完全、用户、表) 1、完全: IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 2、用户模式: IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC 这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。 3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导入。

TO_DATE('2019-10-09 00:00:00','yyyy-MM-dd hh24:mi:ss')

Oracle 查看表操作历史记录并恢复

前段时间一不小心把Oracle数据库表中了一条数据删除了,用的是delete from,记得delete删除的话数据是可以找回的,就去查询了一些资料,总结了一下。

一、查找表操作记录

1.首先查找表操作的历史记录 select * from v$sqlarea a where a.SQL_TEXT like '%表名%';

2,从上面的记录中找到update语句对应的sql_id select * from v

math?formula=sqltext%20a%2Cvsqlarea b where a.SQL_ID=b.SQL_ID and b.SQL_ID in('cq53826tk4u3c','afftnrfhu5utk') order by b.LAST_ACTIVE_TIME desc;

3,从上面的记录中找到最新的sql操作记录,然后找到用户名和主机 select * from sys.v_

math?formula=session%20l%2Csys.v_sql s where s.SQL_ID='cq53826tk4u3c' and l.USERNAME is not null;

二、恢复数据

1.根据时间恢复

示例: select * from EMP; delete from EMP where EMPNO=7369;

查询当前电脑时间: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;

查询删除之前数据: select * from EMP as of timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss');

恢复数据: flashback table EMP to timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss');

注意:若出现报错:ORA-08189:未启用行移动功能,不能闪回表;

则: alter table EMP enable row movement; //开启行移动功能 alter table EMP disable row movement; //关闭行移动功能

2.根据数据库SCN恢复数据

查询当前数据库SCN号: select current_scn from v$database;(不能执行的话,切换到sys用户或system用户查询) //查询到的当前值为:91799986

缩小SCN号查询被删除表数据:(若无数据继续缩小SCN,由于数据库操作不止一人,SCN号变化比较多,可以多缩小几个号) select * from 表名 as of scn 91799980;

恢复数据: flashback table 表名 to scn 91799980;

恢复完成。若报错:ORA-08189:未启用行移动功能,不能闪回表;结果方案同上。

ORACLE导入导出expdp impdp命令

1.create public database link VANDADBLINK

connect to vanda identified by vanda

using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.33.204)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = c3mvideo)))';

create directory backup as '/backup' grant read,write on directory backup to system

select * from all_directories;

3.expdp "vanda"/"vanda@192.168.33.204:1521/c3mvideo" directory=vandadir dumpfile=vanda2019.dmp logfile=vanda2019.log schemas=vanda network_link=vandadblink

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值