由于项目需要,需要对Oracle数据库进行导入导出操作,但是由于没有接触过Oracle,在数据的导入导出过程中有很多的错误。在这里对自己用到的知识做一个汇总。
Oracle命令:
1 进入数据库(首先进入Oracle的bin 文件中,这样sqlplus才有效)
第一种方式(指定数据库登录):
sqlplus sys/123456@localhost:1521/localtest as sysdba
第二种方式(指定数据库登录):
打开cmd,
输入:sqlplus/nolog
输入:conn username/passworld@数据库名称
第三种方式超级管理员用户(不需要用户和密码):
sql>conn / as syddba;
2 退出数据库
使用exit命令
3 对表空间的查看
1查看视图结构: desc V$tablespace;
字段名 | 数据类型 | 说明 |
TS# | NUMBER | 表空间编号 |
NAME | VARCHAR2(30) | 表空间名称 |
INCLUDED_IN_DATABASE_BACKUP | VARCHAR2(3) | 表明该空间是否包含在完整数据库备份中 |
BIGFILE | VARCHAR2(3) | 是否为大文件表空间 |
FLASHBACK_ON | VARCHAR2(3) | 表明该表空间是否参与FLASHBACK DATABASE操作。 |
ENCRYPT_IN_BACKUP | VARCHAR2(3) | 指定备份数据库是否被加密。ON表示表空间级别启动数据库加密功能。OFF表示表空间级别关闭数据库加密功能。NULL表示在表空间级别未明确指定是否启动或关闭数据库加密功能。 |
CON_ID | NUMBER | 容器数据库编号。 |
2查看表空间信息:
select * from v$tablespace;
3其他操作
1.查看表空间组及其所属的表空间信息,可以通过使用视图DBA_TABLESPACE_GROUPS。
2.查看表空间中所包含的段信息,可以通过使用视图DBA_SEGMENTS.
3.查看表空间中空闲区间的信息,可以通过使用视图DBA_FREE_SPACE。
数据库导入导出
因为Oracle和MYSQL不一样,它是创建表空间。我在导出数据的时候很是不理解。下面是我整理的关于导入导出的东西:
Oracle数据库的简单说明
1.oracle数据库创建实例的过程类似于sql server创建数据库,但是oracle中的实例建立完毕之后。可以在实例下创建多个表空间,一个表空间对应一个用户。
2.创建表空间的时候你的username/pwd也会生成。当你连接数据的时候,jdbc:oracle:thin:@127.0.0.1:1521:orcl其中的orcl就是实例名称,你想连接哪一个表空间,那么你的用户名和密码就写你要连接的那个表空间的用户名密码。
Oracle创建新用户及表空间
1 创建表空间:
create tablespace mytable
datafile 'mytable'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
create tablespace mytable --创建表空间shopping
datafile 'mytable' --表空间使用的数据文件
size 50m --大小50m
autoextend on --自动扩展
next 50m maxsize 20480m --最大可到20480m(也可以是next 50M maxsize unlimited)
若表空间在导入数据时不足时,可以修改表空间如下:
alter database datafile 'd:\myoracle\mytables1.dbf' autoextend on;
删除命名空间
DROP TABLESPACE tablespace INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
2、创建用户并授权
其格式为:格式: create user 用户 名 identified by 密码 default tablespace 表空间表;
如:
create user ITMS
identified by 123456
default tablespace mytable;
接着授权给新建的用户:
grant connect,resource,dba to ITMS;
表示把 connect,resource, dba权限授予ITMS用户
————说明————
grant dba to username;
//不给用户授予dba权限,用户将无法查看系统表,例如v$datafile,dba_data_files等
revoke dba from username;//对用户username回收dba权限
grant connect to username;
//不给新建用户授予connect权限,新建用户无法通过SID或SERVICE_NAME连接数据库实例,即无法登录数据库
revoke connect to username;//对用户username回收connect权限
grant resource to username with admin option;
grant unlimited tablespace to username with admin option;
//不给新建用户授予resource权限,新建用户无法创建表
revoke resource from username;//对用户回收resource权限
/*(UNLIMITEDTABLESPACE系统权限:此系统权限会覆盖所有的单个表空间限额,并向用户提供所有表空间(包括SYSTEM和SYSAUX)的无限制限额(注:授予resource角色的时候也会授予此权限))*/
//查看指定用户有哪些系统权限
select * from dba_role_privs where grantee=upper('username');
// 查看指定用户有哪些对象权限
select * from dba_tab_privs where grantee=upper('username');
删除用户:
drop user collect_test cascade;
3可能遇到问题:
当在一个新建数据库用户上创建表失败时,可以查看系统权限
在当前用户执行select * from dba_role_privs where grantee=upper('username');如果不能执行(提示表或视图不存在),说明没有dba权限
解决方法:可以登录sys账户赋予dba权限
登录sys:sqlplus / as sysdba
给username赋权限:grant dba to username;
也可以直接登录sys账户,select * from dba_role_privs where grantee=upper('username'),如果granted_role的值没有dba,说明没有dba权限
4 权限相关的查询和赋予:
所有权限的赋予均是在有赋予权限的用户下进行,此处授权用户都是sys用户
1、select * from dba_role_privs where grantee=upper('luyongpeng');
其中,admin_option是通过在授权时添加with admin option 选项定义
grant dba to luyongpeng with admin option;//admin_option为YES,如果不加with admin option 选项,则admin_option为NO
使用grant dba to luyongpeng;无法覆盖之前的权限
但grant dba to luyongpeng with admin option 可以覆盖grant dba to luyongpeng;的权限
数据导出:
exp qhmis/qhmis@qhmis file='d:\backup\qhmis\qhmis20060526.dmp' grants=y full=n(不要分号)
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y(不要分号)
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)(不要分号)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)(不要分号)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
数据的导入
数据的导入不是在sqlplus.exe中导入的,需要exit 直接使用cmd的dos 命令
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp full=y(不使用分号)
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
下面这句是执行将c盘的oracle的备份的用户qhmis导入到用户qhmis的数据库
imp qhmis/qhmis@qhmis file='c:qhmis20060224.dmp' ignore=n grants=y full=y
将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子
exp userid=system/manager owner=username1 file=expfile.dmp
imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp
导入表DMP文件
退出登陆(退出sqlplus),在cmd中输入:
imp ITMS/123456@orcl file=E:\mrs_2015.dmp full=y
导入数据库
删除用户,表空间
imp username/password@haglc file=拖入路径 full=y ignore=y (不要分号)
先删除user
drop user ×× cascade
说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。
后删除tablespace
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;