Oracleの一般的な操作および保守コマンド

1つは、Oracleがデータベースを構築および削除するコマンドです。

(1)oracle11g

データベースを構築します(通常、gdbnameとsid名を同じに構成し、sysパスワードをシステムパスワードと同じに構成してメモリを確保します)

[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

ライブラリメソッド1を削除します。

[oracledb@ ~]$ dbca -silent -deleteDatabase -sourceDB  SIDNAME -sysDBAUserName sys -sysDBAPassword SYSPASSWORD

ライブラリメソッド2を削除します。

#步骤1:配置回应文件:
[oracledb@ ~]$ cat /u01/oracle/response/dbca.rsp
OPERATION_TYPE = "deleteDatabase"
SOURCEDB = "SIDNAME"
SYSDBAUSERNAME = "sys"
SYSDBAPASSWORD = "SYSPASSWORD"

#步骤2:执行回应文件删库:
[oracledb@ ~]$ dbca -silent -responseFile /u01/oracle/response/dbca.rsp

(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 2048
#删库命令同上,注意运行删库命令之后,需要手动删除遗留的目录

(3)削除すると、通常、次のパスまたはファイルのライブラリ情報が自動的に削除されます。

A:/u01/oracle/admin/SIDNAME
B:cat /etc/oratab
C:/u01/oracle/oradata/SIDNAME

次のパスは手動でクリーンアップする必要があります

D:/u01/oracle/cfgtoollogs/dbca/SIDNAME
E:/u01/oracle/diag/rdbms/SIDNAME
F:/u01/oracle/product/11.2.0/dbhome_1/dbs/hc_SIDNAME.dat

2.ライブラリに対応するアカウントパスワードを作成します

1.スイッチSID

[oracledb@ ~]$ export ORACLE_SID=SIDNAME

2.文字セットを切り替えます

#查看oracle数据库的字符集
SQL> select userenv('language') from dual;

#查看oracle数据库的编码
SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
[oracledb@ ~]$ set NLS_LANG=AMERICAN_AMERICA.AL32UTF8     #windows_os
[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;

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;
SQL> grant unlimited tablespace to USERNAME;

SQL> grant create public synonym to USERNAME;
SQL> grant drop public synonym to USERNAME;

SQL> create or replace directory dir_dump  as '/u01/oracle/backup';
SQL> grant read,write on directory dir_dump to USERNAME;

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

-インスタンス環境に応じてプロセスとセッションのパラメータ値を変更します(Oracleデータベースを再起動する必要があります)

SQL> alter system set processes=1000 scope=spfile;  
SQL> alter system set sessions=1105 scope=spfile; 

知識のポイント:

  • oracle11g:セッション値の定義は、1.1processes + 5より大きいか、1.1processes +5に設定する必要があります。1.1processes+ 5より小さい場合、Oracleは起動時にこのパラメータを1.1processes +5に自動的に設定します。これは主に、バックグラウンドプロセスによって開始されたセッションと再帰セッションの約10%を考慮しています。
  • oracle12c:1.1processes + 22
#查询当前oracle的并发连接数:
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;
#查看所有用户:
select * from all_users;
#当前的连接数
select count(*) from v$process;
#数据库允许的最大连接数
select value from v$parameter where name = 'processes';

3つ、データベースの復元およびバックアップコマンド

expdpエクスポートバックアップストレージパスを表示します。

sql> select * from dba_directories;

1.ライブラリ全体のバックアップおよび復元操作

  • (1)データベースのバックアップ(SIDNAMEとSCHEMASNAMEが一致しない場合があることに注意してください。使用するときは区別に注意してください。通常は同じ名前を構成します。これはメモリに便利ですが、操作と保守にも便利です。並列パラメーターは、サーバーメモリの構成やその他の条件に応じた妥当な値。)
#备份:
[oracledb@ ~]$  expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=SIDNAME`date +%Y%m%d`.dmp directory=dir_dump parallel=2
12
  • (2)復元
    ケース1。元のデータベースとターゲットデータベースのインスタンス名が異なります(一部の環境のデータテーブルスペース名はSIDNAME_dataではないことに注意してください。使用する場合は確認してください)。
#格式:
[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp  DIRECTORY=dir_dump remap_schema=源SCHEMASNAME:目标SCHEMASNAME remap_tablespace=源_data:目标_data

ケース2:ソースライブラリとターゲットライブラリのインスタンス名が同じ

#格式:
[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp  DIRECTORY=dir_dump EXCLUDE=STATISTICS 

知識の拡張:EXCLUDE = STATISTICSを使用して、復元時に統計を除外します。次のコマンドを使用して、統計を完了できます。

#命令如下:
SQL> exec dbms_stats.gather_schema_stats(ownname=>'SIDNAME',estimate_percent=>10,degree=>8,cascade=>true,granularity=>'ALL');

2.単一テーブルのバックアップおよび復元操作の場合

  • (1)、単一テーブルのバックアップ
格式:
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump tables=TABLENAME
  • (2)単一のテーブルを復元します
#格式:
[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump TABLES=TABLENAME TABLE_EXISTS_ACTION=REPLACE

拡張:table_exists_actionパラメーターの説明

使用imp进行数据导入时,若表已经存在,要先drop掉表,再进行导入。
而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式:
参数(1) skip:默认操作
参数(2) replace:先drop表,然后创建表,最后插入数据
参数(3) append:在原来数据的基础上增加数据
参数(4) truncate:先truncate,然后再插入数据
  • (3)複数のテーブルをバックアップする
#格式:
[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

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

ケース2.下位バージョンを上位バージョンに復元する場合、上位バージョンは一般的に下位バージョンと互換性があります。現在、個人の操作および保守作業で11〜12の復元に問題はありません。

  • 2)拡張機能2:

(1)コピーあたり5Gサイズなど、指定されたサイズに従ってバックアップします(並列処理はマルチスレッド処理であり、スレッド数は生成されたファイル数より少なく、スレッド数はCPUスレッド)

#备份格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=expdpXXX.log filesize=5G parallel=16

(2)複数のバックアップファイルを復元します。

#还原格式
[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=impdpXXX.log parallel=16

3)拡張機能3

エクスポートフィルターはテーブルをエクスポートしません:

#格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp  exclude=TABLE:\"IN \'TABLENAME\'\" 

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

バックアップをエクスポートするときは、テーブルを保持し、テーブルデータをクリアします(クエリパラメータ)。

#格式
[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"',........

6)エクステンション6

バックアップをエクスポートするときにテーブルを保持し、テーブルデータをクリアし、2つのテーブルを同時にフィルタリングします

#格式
[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"',........

6)エクステンション6

バックアップをエクスポートするときにテーブルを保持し、テーブルデータをクリアし、2つのテーブルを同時にフィルタリングします

#格式
[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\'\"

7)拡張機能7

データベース内の各テーブルのデータのみを統計し、エクスポートはしません。パラメーターestimate_only = y

#格式
[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump estimate_only=y

8)拡張8

単一のテーブルを一時テーブルにインポートします。

#格式(涉及统计与索引时添加参数EXCLUDE=STATISTICS EXCLUDE=INDEX)
—sql实现从这张表复制到另一张临时表

SQL> CREATE TABLE 目标TABLENAME  AS (SELECT * FROM 源TABLENAME);
—清空表中的数据

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スクリプトの内容は非常に長いです。PLSQLDeveloperツールで実行すると、常にスタックし、応答がありません。PLSQLDeveloperツールでコマンドウィンドウで実行するだけでなく、シェルターミナルを使用して実行することもできます。

#格式
[oracle@localhost ~]$ export ORACLE_SID=SIDNAME
[oracle@localhost ~]$ sqlplus  / as sysdba
sql> conn USERNAME/USERPASSWORD@SIDNAME
sql> @/u01/oracle/backup/XXX.sql

10)エクステンション10

expdpおよびimpdpタスクを正しく終了する方法、手順は次のとおりです。

步骤1、查看视图dba_datapump_jobs

select job_name,state from dba_datapump_jobs;
步骤2、正确停止expdp导出任务使用stop_job

expdp USERNAME/USERPASSWORD@SIDNAME attach=SYS_EXPORT_SCHEMA_02
步骤3、停止任务

Export> stop_job=immediate 
Are you sure you wish to stop this job ([yes]/no): yes  
步骤4、查看系统中的备份job状态

select owner_name,job_name ,state from dba_datapump_jobs;

拡張機能:次のコマンドはインタラクティブモードで有効です。

HELP: 总结交互命令。
KILL_JOB: 分离和删除作业。
PARALLEL: 更改当前作业的活动 worker 的数目。
PARALLEL=.2
START_JOB: 启动/恢复当前作业。
START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业停止时执行的任意操作。
STATUS :在默认值(0)将显示可用时的新状态的情况下,要监视的频率(以秒计)作业状态。
STATUS[=interval]
STOP_JOB: 顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭数据泵作业。

11)エクステンション11

#查看DB中的NLS_CHARACTERSET的值
SQL> select * from v$nls_parameters  where parameter='NLS_CHARACTERSET'; 
SQL> select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';

12)拡張機能12

exp、imp、expdp、impdpについて

(1)、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
(2)、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
(3)、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
(4)、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。

13)拡張13

Oracleユーザーのパスワードに@記号が付いている場合、expdpとsqlplusの間の接続、およびrar圧縮を使用したバックアップファイル

@echo off
rem ---- dmp backup directory, same as dump dir
set backup_dir=e:\app\oracle\backup
rem ---- today, day for dmp file remaining
set day=%date:~0,4%%date:~5,2%%date:~8,2%
set remain_day=7

rem --- delete files before 7 days
forfiles /p "%backup_dir%" /d -%remain_day%  /c "cmd /c del /f @path"

rem --- export oracle data to dmp file
expdp 用户名/\"xxx@yyy\"@orcl directory=dir_dump dumpfile=用户名_%day%.dmp logfile=用户名_%day%.log schemas=用户名 parallel=4 compression=ALL
rem --- sqlplus conn
sqlplus 用户名/"""xxx@yyy"""@orcl

rem ---- if compress the dumpfile and delete source dumpfile, unmark rem

set rar="C:\Program Files (x86)\WinRAR\WinRAR.exe"

%rar% a -df %backup_dir%\用户名_%day%.rar %backup_dir%\用户名_%day%.dmp %backup_dir%\用户名_%day%.log

4、クリーンアップ(復元中のエラー、ユーザー表スペースのクリア)

1.データ表スペースを削除します。

#执行语句:
[oracledb@ ~]$ sqlplus / as sysdba
SQL> drop tablespace mepro_data including contents and datafiles cascade constraint;

2.一時表スペースを削除します。

#执行语句:
SQL> drop tablespace mepro_temp including contents and datafiles cascade constraints;

3.ユーザーを削除します。

#执行语句:
SQL> drop user srmhdld cascade;

4.ユーザーが接続中であり、削除できないことを報告するソリューション

---方法1:重启并迅速执行drop user语句(个人推荐)
SQL> shutdown immediate;
SQL> startup

---方法2:删除正在连接的session(连接的session连接着很多时,清理耗时,没有方法1快速)
#查询用户会话
SQL> select username,serial#,sid,program,machine,status from v$session where username='USERNAME' AND STATUS='ACTIVE';;
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

---删除相关用户会话
SQL> alter system kill session 'serial#, sid';

おすすめ

転載: blog.csdn.net/KH_FC/article/details/110858045