sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,默认未解锁
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott
create user zhangsan;//在管理员帐户下,创建用户zhangsan
alert user scott identified by tiger;//修改密码
grant create session to zhangsan; //授予zhangsan用户创建session的权限,即登陆权限
grant unlimited tablespace to zhangsan;//授予zhangsan用户使用表空间的权限
grant create table to zhangsan;//授予创建表的权限
grante drop table to zhangsan;//授予删除表的权限
grant insert table to zhangsan;//插入表的权限
grant update table to zhangsan;//修改表的权限
grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)
grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限
grant drop on tablename to zhangsan;//授予删除表的权限
grant insert on tablename to zhangsan;//授予插入的权限
grant update on tablename to zhangsan;//授予修改表的权限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限
基本语法同grant,关键字为revoke
select * from user_sys_privs;//查看当前用户所有权限
select * from user_tab_privs;//查看所用用户对表的权限
select * from zhangsan.tablename
即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:
grant alert table on tablename to zhangsan with admin option;//关键字 with admin option
grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似
角色即权限的集合,可以把一个角色授予给用户
create role myrole;//创建角色
grant create session to myrole;//将创建session的权限授予myrole
grant myrole to zhangsan;//授予zhangsan用户myrole的角色
drop role myrole;删除角色
查询当前用户的表空间
select default_tablespace from dba_users where username='登录用户'
查询所有表空间
-- 1 )方式1:dba_tablespaces --
select * from dba_tablespaces;
--2 )方式2:v$tablespace --
select * from v$tablespace;
查询用户下所有表
-- 1 )方式1:user_tables --
select * from user_tables;
--2 )方式2: dba_tables --
select * from dba_tables where owner='TMS21';
查看表空间下有多少用户,tablespace_name表空间 的名字一定要大写
select distinct s.owner from dba_segments s where s.tablespace_name ='TEST_TABLESPACE';
select file_name from dba_data_files;
表空间要求,初始设置128M,可以自动增长,每次增长32M,最大不限制,采用本地管理。
创建语句:
create tablespace 表空间名 datafile '数据文件名.DBF' size 128M autoextend on next 32M maxsize unlimited extent management local;
创建系统的数据库用户,设置密码和默认的表空间,并设置用户的权限,用户需要设置如下三个权限,connect,resource,create any view。
创建语句:
create user 用户名 identified by 密码 default tablespace 表空间名;
赋权限语句:
grant connect,resource,create any view to 用户名;
设置用户对指定路径的读写权限,以导入数据。
查询可用的路径:
select directroy_name,directory_path from all_directories;
设置对路径的读写权限
grant read,write on directory 路径名 to 用户名;
删除表空间及数据库文件
drop tablespace tablespace_name including contents and datafiles;
删除用户权限
如果有删除用户的权限,则可以,加了cascade就可以把用户连带的数据全部删掉。
drop user user_name cascade;
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
expdp流程:
执行expdp和impdp命令需要拥有exp_full_database和imp_full_database权限,授权语句如下: eg:
grant exp_full_database,imp_full_database to orcldev;
查看已经创建的路径信息:
SELECT * FROM dba_directories;
创建路径需要sys权限,需要有create any directory权限才可以创建路径。
选项:DIRECTORY=directory_object
Directory_object用于指定目录对象名称。需要注意,目录对象是使用CREATE
DIRECTORY语句建立的对象,而不是OS目录。
eg:
CREATE OR REPLACE directory backup_path AS 'D:\APP\ORADATA\db_backup';
–创建路径名为dackup_path的路径,并指向硬盘的指定位置
对新创建的路径进行授权操作:
eg:
grant read,write on directory backup_path to orcldev;
–将对路径的读写权限分配各orcldev用户。
expdp orcldev/oracle@orcldev directory=backup_path dumpfile=orcldev_schema.dmp logfile=orcldev_schema_2013.log schemas=orcldev
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_table.dmp logfile=orcldev_table_2013.log tables=('TAB_TEST','TAB_A')
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_meta.dmp logfile=orcldev_meta_2013.log SCHEMAS=orcldev CONTENT=METADATA_ONLY
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_samp.dmp logfile=orcldev_samp_2013.log schemas=orcldev sample=50
parallel参数只有在oracle10g之后的版本(包含10g)有效。
oracle_online:you can use the DUMPFILE parameter during export operations to specify multiple dump files, by using a substitution variable (%U) in the filename. This is called a dump file template. The new dump files are created as they are needed, beginning with 01 for %U, then using 02,03,and so on.
# 数据泵的并行备份,"%U"表示自动生成递增的序列号
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_parallel_%U.dmp logfile=orcldev_parallel.log parallel=4
# 对应的并行恢复,"%U"表示自动生成递增的序列号
impdp orcldev/oracle directory=dackup_path dumpfile=orcldev_parallel_%U.dmp logfile=orcldev_parallel.log parallel=4
注意事项:
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_%U.dmp logfile=orcldev.log compression=ALL
# 对应的恢复不需要进行解压缩,直接导入即可
impdp orcldev/oracle directory=dackup_path dumpfile=orcldev_%U.dmp logfile=orcldev.log
# 并行与压缩备份联合
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_%U.dmp logfile=orcldev.log compression=ALL parallel=4
# 对应的恢复
impdp orcldev/oracle directory=dackup_path dumpfile=orcldev_%U.dmp logfile=orcldev.log parallel=4
eg: --可以剔除的对象有:VIEW,PACKAGE,FUNCTION,index,constraints,table,schema,user等等
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log SCHEMAS=orcldev EXCLUDE=index
#导出这个orcldev方案,剔除以TEST开头的索引
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log SCHEMAS=orcldev EXCLUDE=INDEX:"LIKE 'TEST%'"
#备份整库但剔除SCOTT这个用户的对象。
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log EXCLUDE=SCHEMA:"='SCOTT'"
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log EXCLUDE=USER:"='SCOTT'"
#注意:include与exclude不能同时使用。
expdp命令可以调用parfile文件,在parfile里可以写备份脚本,可以使用query选项。
Oracle highly recommends that you place QUERY specifications in a parameter file; otherwise, you might have to use operating system-specific escape characters on the command line before each quotation mark.
如expdp.txt 内容如下:
USERID=orcldev/oracle directory=dackup_path dumpfile=orcldev_parfile.dmp logfile=orcldev_parfile.log TABLES='TAB_TEST' QUERY="WHERE TRAN_DATE=TO_DATE('2013-08-31','YYYY-MM-DD')"
执行方法:expdp parfile=expdp.txt 即可执行备份
使用parfile好处是使用query选项是不用使用转义字符,如果将query参数放到外边的话,需要将""进行转义。
eg:
UNIX写法:
expdp orcldev/oracle directory=backup_path dumpfile=2013.dmp logfile =2013.log schemas=orcldev INCLUDE=TABLE:\"IN \(\'TEST_A\',\'TEST_B\'\)\"
–在Unix系统执行是需要将单引号进行转义操作,否则会报错。
WINDOWS写法:
expdp orcldev/oracle directory=backup_path dumpfile=2013.dmp logfile =2013.log schemas=orcldev INCLUDE=TABLE:"IN \('TEST_A','TEST_B')"
expdp orcldev/oracle directory=backup_path dumpfile=2013.dmp logfile =2013.log tablespaces=user,orcldev
VERSION选项默认值是COMPATIBLE,即兼容模式。在我们备份的时候,可以指定版本号。
expdp orcldev/oracle directory=backup_path dumpfile=2013.dmp logfile =2013.log full=Y VERSION=10.2.0.4
指定导出特定时间点的表数据,可以联系一下FLASHBACK功能。
expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_flash.dmp logfile=orcldev_flash.log SCHEMAS=orcldev FLASHBACK_TIME="TO_TIMESTAMP('2013-09-28 14:30:00','DD-MM-YYYY HH24:MI:SS')"
设置用户对指定路径的读写权限,以导入数据。
查询可用的路径:
select directroy_name,directory_path from all_directories;
将后缀名为dmp的文件放到指定的目录下,如果该路径下没有权限设置权限如下:
设置对路径的读写权限
grant read,write on directory 路径名 to 用户名;
执行系统命令impdp:
impdp 用户名/密码 remap_schema=导出的schema名:导入的schema名 remap_tablespace=导出的表空间名:导入的表空间名 dumpfile=数据文件名 directory=路径名 logfile=导入日志名 transform=oid:n;
impdp流程:
见上文“二、数据库创建”
impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott logfile=impdp.log;
impdp 用户名/密码@地址/orcl DIRECTORY=dump_dir DUMPFILE=dump_name.dmp remap_schema=source_schema:target_schema remap_tablespace=source_tablespace:target_tablespace
1.REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时需要该选项.
REMAP_DATAFILE=source_datafie:target_datafile
2.REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
3.REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
4.REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N
REUSE_DATAFIELS={Y | N}
5.SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为N
6.sqlfile 参数允许创建DDL脚本文件
impdp scott/tiger directory=dump_scott dumpfile=a1.dmp sqlfile=c.sql
默认放在directory下,因此不要指定绝对路径
7.STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为Y.
8.TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE |REPLACE}
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;
当设置为APPEND时,会追加数据;
当设置为TRUNCATE时,导入作业会截断表,然后为其追加新数据;
当设置为REPLACE时,导入作业会删除已存在表,重建表并追加数据;
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system logfile=impdp.log table_exists_action=replace (表空间已存在则替换);
impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example logfile=impdp.log;
impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y logfile=impdp.log;
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION
导出
exp 用户名/密码@ip:端口/实例名 file=E:/XXX.DMP full=y
如下:
exp temp/[email protected]:1521/orcl file=E:/temp.DMP full=y
导入
imp 用户名/密码@ip:端口/实例名 file=E:/xxx.DMP full=y
如下:
imp temp/[email protected]:1521/orcl file=E:/temp.DMP full=y
imp cms_enterprise/cms_enterprise file=c:/cms_enterprise1013.DMP full=y
原库–表空间:source;用户:source;密码:source。
目标库–表空间:target;用户:target;密码:target。
grant resource,connect to target;
# 赋 DBA 权限
grant dba to target;
# 撤销此权限,这个位置很关键
revoke unlimited tablespace from target;
# 将用户在 System 表空间的配额置为 0
alter user target quota 0 on system;
# 设置在用户在 target表空间配额不受限。经过上述设置后,就可以用 imp 导入数据,数据将会进入指定的 target表空间:
alter user target quota unlimited on target;
window下导入方法
imp target/target fromuser=source touser=target file=D:/source.dmp ignore=y grants=n
linux 下导入方法:
imp b/b file=source.dmp log=source.log fromuser=source touser=target ignore=y commit=y buffer=52428800 indexes=n grants=n constraints=n
ALTER USER username ACCOUNT UNLOCK;
查看参数:
show parameter deferred_segment_creation;
设置参数:
alter system set deferred_segment_creation=false;
注意:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
a,分析用户下的所有表:将该sql语句查询出的结果都执行一遍(目的为了查询空表)
select 'analyze table '||table_name||' compute statistics;' from user_tables;
b,查询该用户下所有的空表:将第二条sql语句的执行结果都执行一遍
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
c,执行之后就可以导出空表了
导出语句:
expdp name/password@orcl directory=backup_path dumpfile=test.dmp logfile=test.log schemas=test;
错误:expdp ORA-12154: TNS:could not resolve the connect identifier specified
解决方案:
增加ip端口:
expdp name/[email protected]:1521/orcl directory=backup_path dumpfile=test.dmp logfile=test.log schemas=test;
说明:从oracle 10g采用数据泵方式导出,导入到oracle 11g时问题,由于源数据版本与目标数据库版本不一致,遭遇ORA-39001、ORA-39000
解决方法:
需要expdp导出时加上目标数据的version
查看oracle版本:
# 两种方法
select * from v$version;
select banner from sys.v_$version;
错误语句:
expdp name/[email protected]:1521/adc DIRECTORY=backup_path dumpfile=test.dmp schemas=test version=11.2.0.1.0;
错误描述:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name BACKUP_PATH is invalid
解决方案:
重新创建备份目录
先删除原先创建的备份目录:
drop directory backup_path;
重新创建新的备份目录:
create or replace directory backup_path as '/db5/wangyaodong/dmp';
赋权限:
grant read,write on directory backup_path to public;