|
一、oracle建库与删库命令 (1)oracle11g建库(一般习惯配置gdbname与sid名一样,sys密码与system密码一样,以方便记忆) [oracledb@ ~]$ dbca -silent -createDatabase -templateName /u01/oracle/product/11.2.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc -gdbname GDBNAME -sid SIDNAME -characterSet AL32UTF8 -NATIONALCHARACTERSET UTF8 -sysPassword SYSPASSWORD -systemPassword SYSTEMPASSWORD -TOTALMEMORY 2048; t$ ~: Z3 b" T9 o) v/ A删库方法一: [oracledb@ ~]$ dbca -silent -deleteDatabase -sourceDB SIDNAME -sysDBAUserName sys -sysDBAPassword SYSPASSWORD+ U3 y4 {6 `5 X* T8 I% W& u删除库方法二: #步骤1:配置回应文件:$ u1 {7 _; S9 u" a4 N$ s5 ~[oracledb@ ~]$ cat /u01/oracle/response/dbca.rsp OPERATION_TYPE = "deleteDatabase", D* I- r3 y) S# _' l6 `; N SOURCEDB = "SIDNAME", t: F- l& B6 h. v+ _ SYSDBAUSERNAME = "sys"SYSDBA PASSWORD = "SYSPASSWORD", S. N$ G4 C/ N- C" G/ i& | #步骤2:执行回应文件删库: [oracledb@ ~]$ dbca -silent -responseFile /u01/oracle/response/dbca.rsp: \# E6 s( O) C3 b0 s (2)oracle12c 建库 [oracledb@ ~]$ dbca -silent -createDatabase -templateName /u01/oracle/product/orahome/assistants/dbca/templates/General_Purpose.dbc -gdbname GDBNAME -sid SIDNAME -characterSet AL32UTF8 -NATIONALCHARACTERSET UTF8 -sysPassword SYSPASSWORD -systemPassword SYSTEMPASSWORD -TOTALMEMORY 20484 E/ A: s- Z9 g0 C1 f1 R* _0 N#删库命令同上,注意运行删库命令之后,需要手动删除遗留的目录 (3)删除一般会自动删除以下路径或文件中的库信息 A:/u01/oracle/admin/SIDNAMEB:cat /etc/oratab6 I1 d+ e+ j8 j' G7 J# u C:/u01/oracle/oradata/SIDNAME 以下路径需要手动清理 D:/u01/oracle/cfgtoollogs/dbca/SIDNAME" U/ L3 B2 Q6 J7 c* p) r/ l' d9 qE:/u01/oracle/diag/rdbms/SIDNAME/ h1 ~2 J+ e- D- Z# P F:/u01/oracle/product/11.2.0/dbhome_1/dbs/hc_SIDNAME.dat9 t B# I6 v( V; S 二、创建库对应的账号密码 1、切换SID [oracledb@ ~]$ export ORACLE_SID=SIDNAME2、切换字符集 #查看oracle数据库的字符集SQL> select userenv('language') from dual; #查看oracle数据库的编码6 i$ [$ q! }9 Z2 h! S SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; [oracledb@ ~]$ set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #windows_os7 d" i% a+ x0 ?) t2 n [oracledb@ ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #linux_os 3、创建库对应的用户信息 SQL> create temporary tablespace SIDNAME_temp tempfile '/u01/oracle/oradata/SIDNAME/SIDNAME_temp.dbf 'size 64m autoextend on next 64m maxsize unlimited extent management local;SQL> create tablespace SIDNAME_data logging datafile '/u01/oracle/oradata/SIDNAME/SIDNAME_data.dbf' size 64m autoextend on next 64m maxsize 2048m extent management local;! P5 P8 B% E% j) A+ A) P" D * ? U- K% `- T# |8 M M SQL> create user USERNAME identified by USERPASSWORD default tablespace SIDNAME_data temporary tablespace SIDNAME_temp; SQL> grant connect,resource to USERNAME; SQL> grant create view to USERNAME;: U4 E3 D# X- l, L7 {7 H+ K6 Q SQL> grant unlimited tablespace to USERNAME;! B) q ?& _; z& z& P; e8 r- P9 p7 w SQL> grant create public synonym to USERNAME;0 c' w' ^7 j* z ~! T Z1 O SQL> grant drop public synonym to USERNAME;# R' G* i8 i$ B+ d. t+ \ 3 G% Z _+ m& `& @9 A0 f* O$ c2 E SQL> create or replace directory dir_dump as '/u01/oracle/backup';4 E5 t2 `4 Q( H9 g SQL> grant read,write on directory dir_dump to USERNAME;8 W! ]4 H0 z% q7 c& {6 S ' E( R8 L; b) t4 [% M8 L SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; —根据实例环境修改processes与sessions参数值(需要重启oracle数据库) SQL> alter system set processes=1000 scope=spfile; SQL> alter system set sessions=1105 scope=spfile; ( _9 C, M1 f6 C# I知识点:
SQL> select count(*) from v$session where status='ACTIVE'; #查看不同用户的连接数: SQL> select username,count(username) from v$session where username is not null group by username; #查看所有用户:0 `9 T! C$ l- @# f7 \ select * from all_users;# {3 ?4 n `$ ^# \0 x #当前的连接数7 \0 W4 J; f2 Z! N5 _ g select count(*) from v$process; #数据库允许的最大连接数 select value from v$parameter where name = 'processes';1 y2 C5 ~) M5 s; K( D& P$ C 三、数据库的还原与备份命令 查看expdp导出备份存储路径: sql> select * from dba_directories;1、针对整个库备份与还原操作 (1)、数据库的备份(注意有时SIDNAME与SCHEMASNAME不一致,要注意使用时区分,一般配置一样的名称,方便记忆的同时,也方便运维。parallel参数根据服务器内存等配置情况添加合理的数值。) #备份:[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=SIDNAME`date +%Y%m%d`.dmp directory=dir_dump parallel=2, {0 }6 o$ P- a 127 E4 u4 {7 j4 d; Y6 r: P (2)、还原 情况1、原始库与目标库实例名不同(注意有些环境的数据表空间名不是SIDNAME_data,使用时注意核实) #格式:+ S2 |4 \3 t% ^$ R7 T5 U[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp DIRECTORY=dir_dump remap_schema=源SCHEMASNAME:目标SCHEMASNAME remap_tablespace=源_data:目标_data9 i8 I# m( E ~& w! o 情况2:源库与目标库实例名相同 #格式:& D" n9 V2 b7 l9 l1 f# L$ ][oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp DIRECTORY=dir_dump EXCLUDE=STATISTICS 知识扩展:使用EXCLUDE=STATISTICS还原时排除统计,可以使用如下命令完成统计 #命令如下:; [/ I2 N6 V5 B( @6 L# j$ QSQL> exec dbms_stats.gather_schema_stats(ownname=>'SIDNAME',estimate_percent=>10,degree=>8,cascade=>true,granularity=>'ALL'); 2、针对单表备份与还原操作 (1)、备份单表 格式:. L4 b2 I( P6 ] X; B3 ~[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump tables=TABLENAME; Y! v E% S4 c- U: o5 ~4 [ (2)、还原单表 #格式:8 v$ I8 } e9 V9 E9 M[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump TABLES=TABLENAME TABLE_EXISTS_ACTION=REPLACE- ~, y6 ~6 D1 t8 o; n% y1 c% _ 扩展:table_exists_action参数说明 使用imp进行数据导入时,若表已经存在,要先drop掉表,再进行导入。+ K! V7 c, X& K而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式:+ S C& H" N% ] ] 参数(1) skip:默认操作 参数(2) replace:先drop表,然后创建表,最后插入数据1 Z) J ?' M' b! U M$ ^ 参数(3) append:在原来数据的基础上增加数据 参数(4) truncate:先truncate,然后再插入数据, ]# R/ g, B3 ?3 a$ O8 i0 u4 Z (3)备份多张表 #格式:* K" K. ?: Y6 k[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump TABLES=源TABLENAME1,源TABLENAME2,..... (4)还原多张表 #格式:[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump remap_table=源TABLENAME1:目标TABLENAME11 TABLE_EXISTS_ACTION=REPLACE [oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump remap_table=源TABLENAME2:目标TABLENAME22 TABLE_EXISTS_ACTION=REPLACE) `0 Q b) A+ Q9 v( c8 ` S 3、扩展知识 1)扩展1: 情况1、高版本往低版本导出还原时,如12往11还原时,在12c执行导出时,添加低版本的版本号version=11.1.0.2.0 #格式:[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=XXX.dmp DIRECTORY=dir_dump version=11.1.0.2.0: y/ a5 U/ u+ a& j3 p1 @ 情况2、低版本往高版本还原时,高版本一般兼容低版本,目前个人运维工作中11往12还原没遇到什么问题。 2)扩展2: (1)、按指定大小备份,如每份5G大小(parallel是多线程处理,线程数要小于生成文件个数,线程要小于 cpu 线程数) #备份格式5 D& B7 l$ U @[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=expdpXXX.log filesize=5G parallel=16( v" j3 t- R- H* t (2)、多个备份文件还原: #还原格式/ L. ?4 u U6 J, K7 f% a[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=impdpXXX.log parallel=165 ?+ N6 q, w7 h4 j; q9 I* M 3)扩展3导出过滤不导出某张表: #格式9 K. N% ^- b9 ~" J' \9 o! b/ _[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp exclude=TABLE:\"IN \'TABLENAME\'\" ( U: H& T4 f C& j 4)扩展4不同库还原时不改变数据结构使用truncate参数: #格式[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp remap_schema=源SCHEMASNAME:目标SCHEMASNAME remap_tablespace=源_data:目标_data TABLE_EXISTS_ACTION=truncate 5)扩展5导出备份时保留表,清除表数据(query参数): #格式- k# p# v. p) L r Y[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"',........( v6 d/ `4 K* I$ y7 n8 z% E 6)扩展6导出备份时保留表,清除表数据,同时过滤某两张表 #格式% F# `4 Y& x0 x* f[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"' exclude=TABLE:\"IN \'TABLENAME1\'\'TABLENAME2\'\"; Y$ _- ~7 C/ n! E( `$ K6 U 7)扩展7仅统计数据库各表数据,但不导出,参数estimate_only=y #格式[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump estimate_only=y8)扩展8导入单表到某临时表: #格式(涉及统计与索引时添加参数EXCLUDE=STATISTICS EXCLUDE=INDEX)/ r5 Y' E) R% F3 R! A5 y—sql实现从这张表复制到另一张临时表5 ~' {1 ~( W! e; `3 G, ^' S SQL> CREATE TABLE 目标TABLENAME AS (SELECT * FROM 源TABLENAME); —清空表中的数据3 r4 ~7 e" K9 u, u% t2 | SQL> delete from 目标TABLENAME; [oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME DIRECTORY=dir_dump DUMPFILE=tablenameXXX.dmp remap_table=源TABLENAME:目标TABLENAME TABLE_EXISTS_ACTION=REPLACE EXCLUDE=STATISTICS EXCLUDE=INDEX [oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME ESTIMATE_ONLY=y NOLOGFILE=y FULL=y 9)扩展9个别sql脚本内容很长,使用PLSQL Developer工具执行时会一直卡住无响应时除使用PLSQL Developer工具的在命令窗口中执行外,也可以使用shell终端执行 #格式[oracle@localhost ~]$ export ORACLE_SID=SIDNAME [oracle@localhost ~]$ sqlplus / as sysdba sql> conn USERNAME/USERPASSWORD@SIDNAME. G C- G" u+ \ sql> @/u01/oracle/backup/XXX.sql 10)扩展10如何正确终止expdp与impdp任务,操作步骤如下: 步骤1、查看视图dba_datapump_jobs' m0 i* n% Y, m5 Y% Iselect job_name,state from dba_datapump_jobs;! [+ W% ~3 w- m 步骤2、正确停止expdp导出任务使用stop_job9 K! X/ ?: O+ [- w6 |- p( f' T4 c) M # F2 k5 b# a7 z- P' | expdp USERNAME/USERPASSWORD@SIDNAME attach=SYS_EXPORT_SCHEMA_026 A, B9 K3 ]7 h* s. O& m 步骤3、停止任务 Export> stop_job=immediate % W+ X8 I3 y7 Y* d7 I+ A1 I Are you sure you wish to stop this job ([yes]/no): yes ' i2 O; |" R) \; M2 v# u 步骤4、查看系统中的备份job状态 ! o1 J% u/ B0 T8 a' r8 q' } select owner_name,job_name ,state from dba_datapump_jobs; 扩展:下列命令在交互模式下有效: HELP: 总结交互命令。KILL_JOB: 分离和删除作业。 PARALLEL: 更改当前作业的活动 worker 的数目。 PARALLEL=.2 START_JOB: 启动/恢复当前作业。( E3 K& f$ x, Y START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业停止时执行的任意操作。- X$ m9 @% W: ~ STATUS :在默认值(0)将显示可用时的新状态的情况下,要监视的频率(以秒计)作业状态。: V' k; I& E6 F% | STATUS[=interval]% \0 d& p+ q w6 f STOP_JOB: 顺序关闭执行的作业并退出客户机。 STOP_JOB=IMMEDIATE 将立即关闭数据泵作业。/ F# z' C& Y2 i# Z" u% }5 W3 r 11)扩展11 #查看DB中的NLS_CHARACTERSET的值1 V; f4 S5 S+ Q. J; x2 |SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; SQL> select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';# a$ T; `9 Y9 j2 P2 Y1 U f- `" e 12)扩展12关于exp、imp、expdp、impdp (1)、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。(2)、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。& P- }* {; Q& L (3)、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。! [6 ?6 Z8 f! g# \1 | (4)、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。; P9 \1 i- ?1 P% o* H. z 13)扩展13oracle用户密码有@符号时,expdp与sqlplus连接方式及使用rar压缩备份的文件 @echo offrem ---- dmp backup directory, same as dump dir- s2 K( B/ d& u1 U1 m: K! C. i6 d1 R set backup_dir=e:\app\oracle\backup rem ---- today, day for dmp file remaining8 [* L# ]' b/ c( b* Z! L set day=%date:~0,4%%date:~5,2%%date:~8,2%6 z5 u3 G$ n1 V2 e+ [' X/ m set remain_day=7 $ g# q; `2 n C0 {' C& @9 S rem --- delete files before 7 days3 \/ S8 A2 k6 c/ a forfiles /p "%backup_dir%" /d -%remain_day% /c "cmd /c del /f @path" ' [9 o% a+ o. a, K: W5 i t# L: L rem --- export oracle data to dmp file& F( P" |8 F6 b! t expdp 用户名/\"xxx@yyy\"@orcl directory=dir_dump dumpfile=用户名_%day%.dmp logfile=用户名_%day%.log schemas=用户名 parallel=4 compression=ALL rem --- sqlplus conn% P# d @! I; i sqlplus 用户名/"""xxx@yyy"""@orcl rem ---- if compress the dumpfile and delete source dumpfile, unmark rem- S# F( y2 ^& u0 z % M- X9 X! |$ R, I& ^8 S* ]! Z set rar="C:\Program Files (x86)\WinRAR\WinRAR.exe"1 A o* y+ x* O 8 i8 @) \# r' l %rar% a -df %backup_dir%\用户名_%day%.rar %backup_dir%\用户名_%day%.dmp %backup_dir%\用户名_%day%.log 四、清理(还原时出错,清用户表空间) 1、删除数据表空间: #执行语句:[oracledb@ ~]$ sqlplus / as sysdbaSQL> drop tablespace mepro_data including contents and datafiles cascade constraint;" P* J% X% E: t# O 2、删除临时表空间: #执行语句:SQL> drop tablespace mepro_temp including contents and datafiles cascade constraints;! S* ?" o3 m# e 3、删除用户: #执行语句:6 V& Q- \& l% R, v! ]6 y5 GSQL> drop user srmhdld cascade;1 a6 V& L6 M, `/ [/ _ 4、报用户正在连接,无法删除的解决方法 ---方法1:重启并迅速执行drop user语句(个人推荐)- c7 r' f' Z% Y6 y, w4 @& O) LSQL> shutdown immediate;* r, y, p# O F9 M# n4 u; W9 X SQL> startup 9 c3 e' d; z1 e+ J; H0 r6 Y ---方法2:删除正在连接的session(连接的session连接着很多时,清理耗时,没有方法1快速) #查询用户会话 SQL> select username,serial#,sid,program,machine,status from v$session where username='USERNAME' AND STATUS='ACTIVE';;7 ^+ ~1 x" \2 W+ s) K" o SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;) \3 t, b& U' K: c# G9 k/ r9 b $ ^3 @ u `6 ^9 B ---删除相关用户会话 SQL> alter system kill session 'serial#, sid'; |
微信公众号
手机版