一、导入命令
1、单个文件导入
imp hn_dw/hn_dw file=/home/oracle/test.dmp log=/home/oracle/test.log full=y commit=y ignore=y
imp hn_dw/hn_dw (用户名/密码 )file=/home/oracle/test.dmp(文件路径) log=/home/oracle/test.log(日志路径) full=y commit=y ignore=y
参数解释:
2、多个文件导入
imp hn_dw/hn_dw file=\(test01.dmp,test02.dmp,test03.dmp\) log=hn_log/test.log full=y commit=y ignore=y
imp hn_dw/hn_dw(用户名/密码) file=\(test01.dmp,test02.dmp,test03.dmp\) (多个文件)log=hn_log/test.log full=y commit=y ignore=y
二、查看表空间使用率
SELECT a.tablespace_name "表空间名",
total "表空间大小",
free "表空间剩余大小",
(total - free) "表空间使用大小",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
三、查看表空间数据文件
1、输入命令bai: sqlplus / as sysdba
2、select t1.name,t2.name ?from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;
四、扩充表空间
alter tablespace PARTNER_DBS add datafile '/home/orcl/app/oracle/product/12.1.0_1sscms1.dbf' size 24576m
表空间名:PARTNER_DBS
表空间数据文件路径: /home/orcl/app/oracle/product/12.1.0/db_1/PARTNER_DBS .DBF
2、查看表空间是否开启了自动扩展的功能
SELECT T.TABLESPACE_NAME,
D.FILE_NAME,
D.AUTOEXTENSIBLE,
D.BYTES,
D.MAXBYTES,
D.STATUS
FROM DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME, FILE_NAME;
3、扩大表空间的四种方法:
1、增加数据文件
ALTER TABLESPACE ***_TRD ADD DATAFILE
‘D:\Oracle\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M;
2、增加数据文件并允许自动增长
ALTER TABLESPACE ***_TRD ADD DATAFILE
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;
3、允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’
AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;
4、手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’
RESIZE 10240M;
五、查看oracle用户下所有表
select * from dba_tables where owner in ('用户名');
或者当前用户
select * from user_tables;
六、覆盖之前的表数据
oracle10g之后impdp的table_exists_action参数
impdp username/password table_exists_action=truncate directory=DATA_PUMP_DIR dumpfile=expdpfilename.dmp logfile=implog.log
table_exists_action:
skip 是如果已存在表,则跳过并处理下一个对象;
append是为表增加数据;
truncate是截断表,然后为其增加新数据;
replace是删除已存在表,重新建表并追加数据;
注:使用imp命令导入的话ignore=y就是覆盖;
七、如何查看dmp文件是哪个用户导出
1、打开dmp文件 找关键词CONNECT 后面的bai就是对方的用户名,执行imp userid=用户名/密码@orcl fromuser=原来的旧用户 touser=新的用户file=d:\xxxx.dmp命令成功导入,已执行检测过。
八、删除oracle用户
- 查询用户各进程相对应的 sid、serial#。
-- 注意: username 必须大写
SELECT sid,serial#,username FROM v$session WHERE username = 'AAA';
-- 根据上面的查询结果,将用户占用的所有进程杀掉。
--注意: sid 与 serial#
ALTER SYSTEM KILL SESSION 'xxx, xxx';
-- 删除用户
DROP USER test1 CASCADE;
九、查看oracle数据库版本
1)select* from v$version;
2)select * from product_component_version;
3)set serveroutput on;
exec dbms_output.put_line(dbms_db_version.version);
十、导入导出详细步骤
注:导入导出之前都要先查看字符集:echo $NLS_LANG
1,expdp导入导出需要创建导入导出目录:
sqlplus / as sysdba
create or replace directory test as '/home/oracle/dmp';
exit
2,expdp" '/as sysdba' " directory=test schemas=platform dumpfile=platform_UAT_YYYYMMDD.dmp logfile=platform_UAT_YYYYMMDD.log version=11.2.0.1.0(高版本到低版本需要设置版本号)
3,导入时候把.dmp文件放到/home/oracle/dmp/test下
4,断开所有应用连接,跟PLSQL连接,保证当前数据库没有客户端在连接
5,dba角色用户登陆,sqlplus / as sysdba
6,删除用户 drop user platform cascade;
7,退出sqlplus exit
8,导入之前先查看字符集 echo $NLS_LANG,如果字符集为空,则根据情况自行导入字符集
export NLS_LANG = american_america.ZHS16GBK
9,最后导入dmp文件
impdp " '/as sysdba' " directory=test cluster = no dumpflie=platform_UAT_YYYYMMDD.dmp logfile=platform_YYYYMMDD-imp.log
如果导入失败,则使用下列方法:
impdp " '/as sysdba' " directory=test dumpflie=platform_UAT_YYYYMMDD.dmp
logfile=platform_YYYYMMDD-imp.log remap_schema=SOURCE_USER:platform
使用exp,imp命令导入导出不需要指定directory
1,导入导出之前都要先查看字符集:echo $NLS_LANG
2,exp platform/platform@10.142.83.4:1521/tysys owner=platform file=platform_YYYYMMDD.dmp
3 , imp platform/platform@10.141.238.180:1521/tysys full=y file=platform_YYYYMMDD.dmp ignore=y
4,如果遇到无法导入的情况,则执行创建用户,赋与connect,resource权限,dba角色
sqlplus / as sysdba
create user platform identified by platform default tablespace platform Temporary TABLESPACE Temp;
grant connect,resource,dba to platform;
exit;
5,重复导入exp文件即可。
十一、权限
1、授予权限
1、默认的普通用户SCOTT默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限
--授予 XIMING 用户创建SESSION的权限,即登陆权限,允许用户登录数据库
GRANT CREATE SESSION TO XIMING;
--授予XIMING用户使用表空间的权限
GRANT UNLIMITED TABLESPACE TO XIMING;
--授予创建表的权限
GRANT CREATE TABLE TO XIMING;
--授予删除表的权限
GRANTE DROP TABLE TO XIMING;
--插入表的权限
GRANT INSERT TABLE TO XIMING;
--修改表的权限
GRANT UPDATE TABLE TO XIMING;
--这条比较重要,授予所有权限(ALL)给所有用户(PUBLIC)
GRANT ALL TO PUBLIC;
2、ORALCE对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权
GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用户查看指定表的权限
GRANT DROP ON TABLENAME TO XIMING;--授予删除表的权限
GRANT INSERT ON TABLENAME TO XIMING;--授予插入的权限
GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的权限
GRANT INSERT(ID) ON TABLENAME TO XIMING;
--授予对指定表特定字段的插入和修改权限,注意,只能是INSERT和UPDATE
GRANT UPDATE(ID) ON TABLENAME TO XIMING;
GRANT ALERT ALL TABLE TO XIMING;--授予XIMING用户ALERT任意表的权限
2、撤销权限
基本语法同GRANT,关键字为REVOKE
3、查看权限
SELECT * FROM USER_SYS_PRIVS;--查看当前用户所有权限
SELECT * FROM USER_TAB_PRIVS;--查看所用用户对表的权限
4、操作表的用户的表
SELECT * FROM XIMING.<TABLENAME>(用户.表明);
5、权限传递
即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:
GRANT ALERT TABLE ON TABLENAME TO XIMING WITH ADMIN OPTION;--关键字 WITH ADMIN OPTION
GRANT ALERT TABLE ON TABLENAME TO XIMING WITH GRANT OPTION;--关键字 WITH GRANT OPTION效果和ADMIN类似
十二、更新有用户名和密码
select user#,name from user$ where name='旧用户名'
update user$ set name='新用户民' where user#=? ; 参数
commit;
alter user 旧用户名 identified by "新用户名";
commit;
alter system checkpoint;
alter system flush shared_pool;
十三、报错
1、IMP-00017: following statement failed with ORACLE error 959:
原因:在导入数据库文件时,有一张表未导入成功,报了如下错误:
IMP-00003: 遇到 ORACLE 错误 959 ORA-00959: 表空间 'XXXXXXXXXXX' 不存在。
ORA-00959: ??? 'PARTNER_DBS' ??? (注:PARTNER_DBS这个表空间不存在)
查询的确没有对应的表空间:
select * from dba_data_files where tablespace_name = 'XXXX'
解决:添加上对应的表空间,再重新导入:
create tablespace emaoyi
logging
datafile 'D:\app\Administrator\product\11.2.0\dbhome_1\database\emaoyi.dbf'
size 10m
autoextend on
next 10m maxsize 20480m
extent management local;
注: 表空间自增长,其大小也不会超过最大大小,因此在设置大小时可以将MAXSIZE 设置为unlimited;
2、IMP-00085: multiple input files specified for unbounded export file
为无界导出文件指定了多个输入文件
*原因:在导出的时候一个表因为过大,所以分成几个dmp文件导出,所以在导入的时候注意,要用多个文件一起的命令格式导入,文件要完整且名称要准确。我在导入三个文件时报错,然后转义一下就可以了。命令如下:
解决:imp 用户名/密码 file=\(文件01.dmp,文件02.dmp\) log=hn_log/日志名称.log full=y commit=y ignore=y
3、IMP-00003: ORACLE error 942 encountered
ORA-00942: ???????
原因:1.表或视图真的不存在 2.用户没有访问该表的权限。
GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用户查看指定表的权限
GRANT DROP ON TABLENAME TO XIMING;--授予删除表的权限
GRANT INSERT ON TABLENAME TO XIMING;--授予插入的权限
GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的权限
GRANT INSERT(ID) ON TABLENAME TO XIMING;
解决:给用授予权限
4、ORA-02437: ???? (HN_DW.SYS_C0054645) - ????
原因:创建表示没有添加主键,当表中存在很多重复数据时,此时再添加主键就会报这个错误。所以,设计表的时候一定要注意!
解决:先找出表中重复的数据,然后删除相同数据rowid最小的那一列
5、IMP-00093: Inconsistency between dumpfile constraint definition for table PNR_INSPECT_PLAN_ITEM with columns ("ID")
原因:起因是在导入的过程中要导入系统生成的约束,类似SYS_C0027639, metalink上只提到了这个原因,但是以前很多次的imp应该都是有这样系统生成的约束名,并没有报错过,所以应该还是有另外的因素参杂其中的,比如统计信息的生成。没有继续研究。
解决:在imp时使用indexes=no或statistics=none参数,当然后者比较好一些。
6、ORA-01000
解决:而是IMP-00093,只是由于太多的IMP-00093错误消耗了大量的cursor,导致一个session中的cursor数超过了定义的300,所以在最后就开始报ORA-01000错误了
7、ORA-00001: ???????? (HN_DW.PK_PNR_LINE_LOCUS)
原因:UPDATE或INSERT语句试图插入重复的键
解决:删除唯一约束限制或不插入重复值。
8、IMP-00009: abnormal end of export file
原因:这中情况通常是因为导出文件异常,当导如最后发现异常时,会回退所有操作。
9、ORA-01653: ? HN_DW.TBL_WORKORDER_USER_REPLY ???? 1024 (???? DAIWEIDBS ?) ??
原因:表空间不足
解决:扩充表空间