顯示具有 Oracle 標籤的文章。 顯示所有文章
顯示具有 Oracle 標籤的文章。 顯示所有文章

2016年12月5日 星期一

Oracle DB Export/Import (linux *.sh 檔案)

#!/bin/sh
export ORACLE_HOME=/oradb/oracle/oracle/product/10.2.0/db_1/
export PATH=./:$PATH:$ORACLE_HOME/bin:

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
BACKUP_DIR=/oradb/dmpdir
SCRIPT_DIR=/home/oracle/dailybuild
exp [SchemaName]/[SchemaNamePwd]@XXDB_PROD compress=n consistent=Y buffer=204800 file=$BACKUP_DIR/XXDB_PROD_[SchemaName].dmp LOG=$BACKUP_DIR/exp_XXDB_PROD_[SchemaName].log

reloadFlag=$BACKUP_DIR/plmdebug_is_reloading_now

systemDbLogin="system/******@XXDB"

if [ ! -f "$reloadFlag" ]; then
touch "$reloadFlag"
echo "Start to reload [SchemaName]..."

#========================== Reload Start ==========================
sqlplus $systemDbLogin <  $SCRIPT_DIR/[SchemaName].sql
sqlplus $systemDbLogin <  $SCRIPT_DIR/[SchemaName]_password_tmp.sql
sqlplus $systemDbLogin <  $SCRIPT_DIR/alter.sql
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
imp $systemDbLogin commit=y buffer=1024000 file=$BACKUP_DIR/XXDB_PROD_[SchemaName].dmp fromuser=[SchemaName] touser=[SchemaName] LOG=$BACKUP_DIR/imp_[SchemaName].log
sqlplus $systemDbLogin <  $SCRIPT_DIR/[SchemaName]_password.sql
#========================== Reload End ==========================

echo "[SchemaName] reload accomplished."
rm "$reloadFlag"
else
echo "[SchemaName] is reloading now! Abort this request!"
fi



#[SchemaName].sql 
drop user [SchemaName] cascade;

create user [SchemaName] identified by [SchemaName];

alter user [SchemaName] 
default tablespace [SchemaName]
temporary tablespace TEMP
account unlock ;

grant unlimited tablespace to [SchemaName];
grant connect to [SchemaName];
grant resource to [SchemaName];
grant create session to [SchemaName];
grant create table to [SchemaName];
grant create any synonym to [SchemaName];
grant create public synonym to [SchemaName];
grant create view to [SchemaName];
grant create sequence to [SchemaName];
grant create session to [SchemaName];
grant create procedure to [SchemaName];
grant create trigger to [SchemaName];
grant create type to [SchemaName];
grant create database link to [SchemaName];
grant create public database link to [SchemaName];
grant drop public database link to [SchemaName];
grant create materialized view to [SchemaName];
grant create any materialized view to [SchemaName];
grant drop any materialized view to [SchemaName];
grant drop any synonym to [SchemaName];
grant drop public synonym to [SchemaName];

#[SchemaName]_password.sql 
ALTER USER [SchemaName] IDENTIFIED BY [SchemaName];

#[SchemaName]_password_tmp.sql 
ALTER USER [SchemaName] IDENTIFIED BY [SchemaName]_tmp;

#alter.sql
alter system set deferred_segment_creation=false scope=both;

2015年11月23日 星期一

Oracle - Tablespace 之建立與移除

==== 建立 Table Space ====
create tablespace test_tablespace
datafile
  '/aaa/bbb/ccc/test_tablespace_01.dbf' size 5M autoextend on next 1M maxsize 32767M,
  '/aaa/bbb/ccc/test_tablespace_02.dbf' size 5M autoextend on next 1M maxsize 32767M,
  '/aaa/bbb/ccc/test_tablespace_03.dbf' size 5M autoextend on next 1M maxsize 32767M,
  '/aaa/bbb/ccc/test_tablespace_04.dbf' size 5M autoextend on next 1M maxsize 32767M
;

建立一個名為 test_tablespace 之 Tablespace
並指定四個 data file 分別為
    /aaa/bbb/ccc/test_tablespace_01.dbf
    /aaa/bbb/ccc/test_tablespace_02.dbf
    /aaa/bbb/ccc/test_tablespace_03.dbf
    /aaa/bbb/ccc/test_tablespace_04.dbf
給 test_tablespace
這四個 data file 皆為初始大小 5 MB, 大小會自動增加,每次增加 1 MB, 最多增加到 32767 MB 為止




==== 移除 Table Space ====
drop tablespace test_tablespace including contents and datafiles cascade contsraints
移除 Tablespace test_tablespace

2015年10月14日 星期三

Data Pump 複製 Schema 到另一個 Database Instance


--Login by SYSTEM@wmdev (Target DB)
-- 1. 登入 target db,建立一個 db directory,指定一個檔案系統的目錄路徑

CREATE DIRECTORY [DIR_NAME] AS '/xxxxx/xxxxx';


-- 2. 將此 directory grant read and write 權限給此次 import 會用到的 user schemas
GRANT READ,WRITE ON DIRECTORY [DIR_NAME] TO [Schema_Name];





-- 3. 建立 db link 到 source db (最好使用 source db 的 system 帳號建立 db link)
CREATE PUBLIC DATABASE LINK [Connection_Name]
CONNECT TO system IDENTIFIED BY '********'
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world)(PROTOCOL = TCP)(Host = [Host_Name])(Port = 1521))) (CONNECT_DATA = (SID = [SID])))';



--查看 DB Link 有沒有建成功
SELECT *
FROM ALL_DB_LINKS;



--試著從 DB Link 做 SELECT
SELECT 'A'
FROM DUAL@[Connection_Name];


-- 4. 登入 terminal 執行 impdb 的指令 (詳見附件檔案的範例,指令用法請參考 Oracle Data Pump)
--Login Terminal - 執行 Data Pump - Network Import
--Import Schema 
impdp system/*******@[TNS_NAME] DIRECTORY=[DIR_NAME] SCHEMAS=[Schema_Name] TABLE_EXISTS_ACTION=TRUNCATE NETWORK_LINK=[Connection_Name] ESTIMATE=STATISTICS VERSION=10.2 EXCLUDE=JOB PARALLEL=8



-- 5. Import 完成,檢查 import.log 是否有 error


-- 6. Drop db link
DROP PUBLIC DATABASE LINK WMDB_ONLINE2_CONNECTION;

-- 7. Drop db DIRECTORY
DROP DIRECTORY DMPDIR;

2015年2月9日 星期一

清除 Oracle Data Pump Job

步驟 1:找出正在執行的 JOB


用 system 帳號登入 oracle 並利用下面 SQL 指令
SQL> select job_name, state from dba_datapump_jobs;

JOB_NAME         STATE
------------------------------ ------------------------------
SYS_IMPORT_SCHEMA_02        EXECUTING
SYS_EXPORT_SCHEMA_01        NOT RUNNING
SYS_IMPORT_SCHEMA_01        NOT RUNNING
SYS_EXPORT_SCHEMA_02        NOT RUNNING
 
看到 STATE = EXECUTING 則代表此 JOB 正在執行中,因此我們可以先將 JOB_NAME 記下來
此例子 JOB_NAME = SYS_IMPORT_SCHEMA_02 

步驟 2:執行 Impdp utility
 
   impdp system/******* attach=system.SYS_IMPORT_SCHEMA_02 
system/******* ==> 代表 system 之帳號及密碼

執行結果:
Import: Release 11.2.0.3.0 - Production on Sab May 19 21:55:38 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

Job: SYS_IMPORT_SCHEMA_02
  Owner: system
  Operation: IMPORT
  Creator Privs: TRUE
  GUID: C06A6B4EAEB4122ER0434EDH74850F
  Start Time: Sabado, 19 Mayo, 2012 21:55:04
  Mode: SCHEMA
  Instance: BD1
  Max Parallelism: 1
  EXPORT Job Parameters:
  Parameter Name      Parameter Value:
     CLIENT_COMMAND        system/******** SCHEMAS=SCHEMA DIRECTORY=BCK dumpfile=export_SCHEMA.dmp logfile=export.SCHEMA.log reuse_dumpfiles=true
  IMPORT Job Parameters:
     CLIENT_COMMAND        system/******** SCHEMAS=SCHEMA DIRECTORY=BCK dumpfile=export_SCHEMA.dmp logfile=import_SCHEMA.log
  State: EXECUTING
  Bytes Processed: 90.681.272
  Percent Done: 98
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /bck/export_SCHEMA.dmp

Worker 1 Status:
  Process Name: DW00
  State: EXECUTING
  Object Schema: SCHEMA
  Object Name: TABLE_EXAMPLE
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 28
  Completed Bytes: 90.832
  Worker Parallelism: 1

Import> 

亦可透過 STATUS 指令觀察該 Job 之狀態:
Import> STATUS
Job: SYS_IMPORT_SCHEMA_02
  Operation: IMPORT
  Mode: SCHEMA
  State: EXECUTING
  Bytes Processed: 91.676.344
  Percent Done: 99
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /bck/export_SCHEMA.dmp

Worker 1 Status:
  Process Name: DW00
  State: EXECUTING
  Object Schema: SCHEMA
  Object Name: TABLE_OBJECTS_EXAMPLE
  Object Type: SCHEMA_EXPORT/TABLE/INDEX/INDEX
  Completed Objects: 38
  Worker Parallelism: 1
 
步驟 3:刪除 Job
Import> kill_job
Are you sure you wish to stop this job ([yes]/no):
 
 
步驟 4:刪除 Table (若 Table 還在)
sqlplus / as sysdba
SQL> drop table SYS_IMPORT_SCHEMA_02;
Table dropped. 
 
參考資料:http://albertolarripa.com/2012/05/19/clean-oracle-data-pump-jobs/

How to delete/remove non executing datapump jobs?
https://pavandba.com/2011/07/12/how-to-deleteremove-non-executing-datapump-jobs/

Kill, cancel and resume or restart datapump expdp and impdp jobs
http://blog.oracle48.nl/wordpress/killing-and-resuming-datapump-expdp-and-impdp-jobs/

Find DB Session and DB Process by Server Process ID  (SPID)
--Find Session by SPID (Server Process ID)
SELECT
     S.SID,
     S.SERIAL#,
     S.PROCESS,
     P.SERIAL# PROCESS_SERIAL#,
     P.PID,
     P.SPID,
     S.LOCKWAIT,
     S.STATUS,
     S.LOGON_TIME,
     S.MODULE,
     S.ACTION,
     S.MACHINE
FROM
     V$SESSION S,
     V$PROCESS P
WHERE 1 = 1
AND S.PADDR = P.ADDR
AND (
     P.SPID IN (
          '21581','21674','23559'
     )
)


2015年1月21日 星期三

Oracle Database 刪除目前 User 底下所有 Table

首先利用下面的 SQL Command,即可將刪除 Table 之 SQL command 全部產生出來:

select 'drop table '||table_name||' cascade constraints;' from user_tables order by table_name

接下來批次執行所有產生出來的 SQL command 即可

2014年8月18日 星期一

SQL: 找出某個欄位重複出現的資料

select
    [Column_Name],
    count(*)
from
    [Table_Name] 
group by
    [Column_Name] having count(*) > 1

其中[Column_Name]若是該 Table 中應為 Unique 之欄位,且該欄位未設定為 unique 時,可利用此方法找出重複出現的資料

2014年6月5日 星期四

oracle 11g expdp/impdp 指令速查

一、創建導出數據存放目錄
如:mkdir /ap/dbbackup

二、創建directory邏輯目錄
CREATE OR REPLACE DIRECTORY DMP AS '/ap/dbbackup';
查詢所有 DIRECTORY:
    select * from all_directories where upper(directory_name) = 'xxxxx'

三、導出數據
1)按用戶導
expdp mctpsa/mctpsa@ipap schemas=mctpsa dumpfile=expdp.dmp DIRECTORY=DATA_DUMP_DIR;
2)並行進程parallel
expdp mctpsa/mctpsa@ipap directory=DATA_DUMP_DIR dumpfile=mctpsa3.dmp parallel=40 job_name=mctpsa3
3)按表名導
expdp mctpsa/mctpsa@ipap TABLES=sa_user,sa_dept dumpfile=expdp.dmp DIRECTORY=DATA_DUMP_DIR;
4)按查詢條件導
expdp mctpsa/mctpsa@ipap directory=DATA_DUMP_DIR dumpfile=expdp.dmp Tables=sa_user query='WHERE id=20';
5)按表空間導
expdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=tablespace.dmp TABLESPACES=mctp,mctpsa;
6)導整個資料庫
expdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=full.dmp FULL=y;

四、還原數據
1)導到指定用戶下
impdp mctpsa/mctpsa DIRECTORY=DATA_DUMP_DIR DUMPFILE=expdp.dmp SCHEMAS=mctpsa;
2)改變表的owner
impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=expdp.dmp TABLES=mctpsa.dept REMAP_SCHEMA=mctpsa:system;
3)導入表空間
impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=tablespace.dmp TABLESPACES=example;
4)導入資料庫
impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=full.dmp FULL=y;
5)追加數據
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;

2014年5月11日 星期日

Oracle DB 移除步驟

Oracle 移除步驟如下.
1. 用 oracle 帳號登入.
2. 停掉 DB Service
3. cd $ORACLE_HOME/deinstall
4. ./deinstall
上列步驟執行完後請改用 root 做下列步驟
rm -rf /etc/oraInst.loc
附上參考網址: http://www.askmaclean.com/archives/uninstall-remove-11-2-0-2-grid-infrastructure-database-in-linux.html