oracle数据库中用户、表空间、表之间的关系
用户=商家 表=商品 表空间=仓库 1个商家能有很多商品,1个商品只能属于一个商家 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B 仓库不属于任何商家 商家都有一个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中 oracle中用户的所有数据都是存放在表空间中的,很多个用户可以共用一个表空间,也可以指定一个用户只用某一个表空间。 表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间; 用户:创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象; 表:是数据记录的集合; 创建过程: 表空间—>用户—>表; 所属关系: 表空间 包含 用户 包含 表;
oracle数据库用户删除及表空间删除
以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='<tablespace_name>');
- Disable the constraint:
禁用约束:
SQL> ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name>;
- Drop the tablespace:
删除表空间:
SQL> DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS AND DATAFILES;
Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
2017-12-13 23:43:21 闲了么事干 阅读数 27880更多
分类专栏: 其他
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012092924/article/details/78798137
Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
前提:在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 vsqlarea 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_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