ORACLE DB 的學習者們

2014年1月20日 星期一

安裝設定ORACLE Enterprise Manager (EM)

1. /etc/hosts:

127.0.0.1 localhost.localdomain localhost

::1 localhost6.localdomain6 localhost6

192.168.0.xx hostxx.toplogis.com hostxx

2. 移除錯誤的設定檔:

( http://www.stefanocislaghi.eu/2009/12/unable-to-run-dbconsole-oc4j.html )

$cd /oracle/app/oracle/product/11.2.0/dbhome_1/bin

[oracle@tap07 bin]$ ./emca -deconfig dbcontrol db -repos drop  

STARTED EMCA at Jan 21, 2014 11:22:25 AM
EM Configuration Assistant, Version 11.2.0.3.0 Production
Copyright (c) 2003, 2011, Oracle.  All rights reserved.

Enter the following information:
Database SID: ivdb
Listener port number: 1521
Password for SYS user:
Password for SYSMAN user:

----------------------------------------------------------------------
WARNING : While repository is dropped the database will be put in quiesce mode.
----------------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: yes
Jan 21, 2014 11:22:47 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oracle/app/oracle/cfgtoollogs/emca/ivdb/emca_2014_01_21_11_22_25.log.
Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.util.GeneralUtil initSQLEngineLoacly
WARNING: ORA-28000: the account is locked

Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.ParamsManager checkListenerStatusForDBControl
WARNING: Error initializing SQL connection. SQL operations cannot be performed
Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.EMDBPreConfig performDeconfiguration
WARNING: EM is not configured for this database. No EM-specific actions can be performed. Some of the possible reasons may be:
 1) EM is configured with different hostname then physical host. Set environment variable ORACLE_HOSTNAME= and re-run EMCA script
 2) ORACLE_HOSTNAME is set. Unset it and re-run EMCA script
Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Dropping the EM repository (this may take a while) ...
Jan 21, 2014 11:24:56 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully dropped
Enterprise Manager configuration completed successfully
FINISHED EMCA at Jan 21, 2014 11:24:56 AM
3. 進入該SID的環境

[oracle@tap07 bin]$ . setivdb

4. 新增設定檔

[oracle@tap07 bin]$ ./emca -config dbcontrol db -repos create

STARTED EMCA at Jan 21, 2014 11:25:37 AM
EM Configuration Assistant, Version 11.2.0.3.0 Production
Copyright (c) 2003, 2011, Oracle.  All rights reserved.

Enter the following information:
Database SID: ivdb
Listener port number: 1521
Listener ORACLE_HOME [ /oracle/app/oracle/product/11.2.0/dbhome_1 ]:
Password for SYS user:
Password for DBSNMP user:
Password for SYSMAN user:
Email address for notifications (optional):
Outgoing Mail (SMTP) server for notifications (optional):
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ /oracle/app/oracle/product/11.2.0/dbhome_1

Local hostname ................ tap07.toplogis.com
Listener ORACLE_HOME ................ /oracle/app/oracle/product/11.2.0/dbhome_1
Listener port number ................ 1521
Database SID ................ ivdb
Email address for notifications ...............
Outgoing Mail (SMTP) server for notifications ...............

-----------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: yes
Jan 21, 2014 11:26:04 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oracle/app/oracle/cfgtoollogs/emca/ivdb/emca_2014_01_21_11_25_37.log.
Jan 21, 2014 11:26:05 AM oracle.sysman.emcp.EMReposConfig createRepository
INFO: Creating the EM repository (this may take a while) ...
Jan 21, 2014 11:33:01 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully created
Jan 21, 2014 11:33:07 AM oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository
INFO: Uploading configuration data to EM repository (this may take a while) ...
Jan 21, 2014 11:34:25 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Uploaded configuration data successfully
Jan 21, 2014 11:34:29 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Securing Database Control (this may take a while) ...
Jan 21, 2014 11:34:37 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Database Control secured successfully.
Jan 21, 2014 11:34:37 AM oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Starting Database Control (this may take a while) ...
Jan 21, 2014 11:35:35 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control started successfully
Jan 21, 2014 11:35:35 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> The Database Control URL is https://tap07.toplogis.com:1158/em <<<<<<<<<<<
Jan 21, 2014 11:35:37 AM oracle.sysman.emcp.EMDBPostConfig invoke
WARNING:
************************  WARNING  ************************

Management Repository has been placed in secure mode wherein Enterprise Manager data will be encrypted.  The encryption key has been placed in the file: /oracle/app/oracle/product/11.2.0/dbhome_1/tap07.toplogis.com_ivdb/sysman/config/emkey.ora. Ensure this file is backed up as the encrypted data will become unusable if this file is lost.

***********************************************************
Enterprise Manager configuration completed successfully
FINISHED EMCA at Jan 21, 2014 11:35:37 AM
5. 啟動與結束

啟動:emctl start dbconsole

結束:emctl stop dbconsole

6. 連線:

https://xx.xx.xx.xx:1158/em

2014年1月5日 星期日

MySQL安裝後之設定

【安裝MYSQL DB】

[root@218-161-48-34 bin]# mysql_install_db
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h 218-161-48-34.hinet-ip.hinet.net password 'new-pa                                             ssword'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

[root@218-161-48-34 bin]# mysqld_safe  --user=mysql &
140105 23:36:50 mysqld_safe Logging to '/var/log/mysqld.log'.
140105 23:36:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/
【安全設定】

[root@218-161-48-34 bin]# mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!
【設定ROOT登入】

[root@218-161-48-34 bin]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.1.61 Source distribution

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

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY ' xxxx ' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
【建立新的SCHEMA】

mysql> create schema if not exists david default character set='utf8';
Query OK, 1 row affected (0.01 sec)
【關閉MYSQL】

[root@218-161-48-34 bin]# mysqladmin -u root -p shutdown
Enter password:
140106 00:09:20 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+  Done                    mysqld_safe
啟動MYSQL

[root@david ~]# service mysql restart

確認MYSQL是否於啟動時自動啟動:

[root@david ~]# chkconfig --list | grep sql

將MYSQL 加入rc.local啟動項目:

[root@david ~]# chkconfig mysql on

以本機方式登入MySQL

[root@david ~]#mysql -u root –p

變更root可從遠端登入的 password

[root@david ~]# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxxx' WITH GRANT OPTION;

2014年1月2日 星期四

快速救回被砍之資料

--砍掉

delete from logmnr.employees where employee_id=12;

commit;

--找回來

select * from logmnr.employees as of timestamp

to_timestamp('2013-12-31 09:30:00', 'YYYY-MM-DD HH:MI:SS') where employee_id=12;

--復原

insert into logmnr.employees

(

select * from logmnr.employees as of timestamp

to_timestamp('2013-12-31 09:30:00', 'YYYY-MM-DD HH:MI:SS') where employee_id=12

);

commit;

2013年12月23日 星期一

ORACLE如何新增換行至table當中

update logmnr.employees set name='david'||chr(10)||chr(13) where employee_id='001';

How to Multiplex ControlFile of ORACLE

sqlplus /nolog

conn /as sysdba;

select * from v$controlfile;

create pfile from spfile;

shutdown immediade;

到OS

cp /oracle/database/xxx/control01 /oracle_xxx/control04

cp /oracle/product/10.2.0.1/dbs/initxxx.ora

/oracle/product/10.2.0.1/dbs/initxxx.ora.bak

vi /oracle/product/10.2.0.1/dbs/initxxx.ora

修改其中的control_file参数

sqlplus /nolog

conn /as sysdba;

startup pfile=/oracle/product/10.2.0.1/dbs/initxxx.ora;

select * from v$controlfile; --已经加上了

create spfile from pfile='/oracle/product/10.2.0.1/dbs/initxxx.ora';

shutdown immediate;

sqlplus /nolog

conn /as sysdba;

startup

select * from v$controlfile; --已经加上了

2013年12月4日 星期三

運用LOGMNR處理ARCHIVED LOGFILE進行資料倒回

1.先建立專用之Tablespace與USER。

CREATE TABLESPACE TBS_LOGMNR DATAFILE 
  ' /oracle/app/oracle/oradata/testdb/TBS_LOGMNR01.dbf' SIZE 2570M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

CREATE USER LOGMNR
  IDENTIFIED BY xxxx
  DEFAULT TABLESPACE TBS_LOGMNR
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
  -- 2 Roles for LOGMNR 
  GRANT CONNECT TO LOGMNR;
  GRANT RESOURCE TO LOGMNR;
  ALTER USER LOGMNR DEFAULT ROLE ALL;
  -- 1 System Privilege for LOGMNR 
GRANT UNLIMITED TABLESPACE TO LOGMNR;
2.搜尋現有ARCHIVED LOG,資料字典(DICT)所在位置。

SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';

資料字典可讓LOGMNR將交易SQL對應到正確之資料庫物件,關係後續進行資料倒回時物件之正確性。所找尋之DICT應以接近異常事件時間點之檔案為佳。以下假設所搜尋到之檔案為

1_15141_708784153.dbf。

select * from v$log;

將現有REDO LOG檔案加入LOGMNR

3.將LOGMNR工具的TABLESPACE移至新建的空間位置。(CONSOLE)

EXECUTE dbms_logmnr_d.set_tablespace('TBS_LOGMNR');

4.修改資料庫:新增額外LOG紀錄。(CONSOLE)

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

5.LOGMNR操作:(CONSOLE)

建立LOGMNR

EXECUTE DBMS_LOGMNR_D.BUILD( OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

加入欲分析之LOGFILE(若有未加入之字典,會顯示字典不完全)

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/ora00/oracle/oradata/testdb/redo03.log',OPTIONS => DBMS_LOGMNR.NEW);

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/ora00/oracle/product/102/dbs/arch/1_15141_708784153.dbf',OPTIONS => DBMS_LOGMNR.ADDFILE);

移除不用的LOGFILE(視需求)

EXECUTE DBMS_LOGMNR.REMOVE_LOGFILE(LOGFILENAME =>'/ora00/oracle/product/102/dbs/arch/1_14980_708784153.dbf.dbf');

開始進行分析

EXECUTE dbms_logmnr.start_logmnr(options => DBMS_LOGMNR.DICT_FROM_REDO_LOGS);

匯出分析結果(由v$logmnr_contents表格匯出,可使用SQL過濾條件,表格欄位如下)。以下範例搜尋對HOSEN, WILMAR及CGBT作刪除之SQL,並將其匯出至LOGMNR的表格LOGMNR_14986

create table LOGMNR.logmnr_14986 tablespace TBS_LOGMNR as select * from v$logmnr_contents where RBASQN=14986 and operation='DELETE' and seg_owner='HCOMPANY' or seg_owner='WCOMPANY' or seg_owner='CCOMPANY';

6.運用LOGMNR進行復原操作:上述用LOGMNR所搜尋之SQL紀錄,有兩個欄位作為異常交易倒回之依據:SQL_REDO與SQL_UNDO。

SQL_REDO:異常交易之SQL指令(已被執行的SQL)(在此假設執行INSERT指令)

結論。

異常復原最花時間是能正確鎖定問題時間點,找到正確的Archived Logfile和資料字典,若未能找到正確的Logfile或無正確字典,則無法進行。

2013年3月11日 星期一

Oracle 11G Restore & Recovery

使用RMAN進行復原和還原


RMAN> startup nomount

Oracle instance started

Total System Global Area     598437888 bytes

Fixed Size                     1338140 bytes
Variable Size                457180388 bytes
Database Buffers             134217728 bytes
Redo Buffers                   5701632 bytes



RMAN> restore controlfile from autobackup;

Starting restore at 11-MAR-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

recovery area destination: /u01/app/flash_recovery_area
database name (or database unique name) used for search: JENG
channel ORA_DISK_1: AUTOBACKUP
/u01/app/flash_recovery_area/JENG/autobackup/2013_03_04/o1_mf_s_809175317_8m838pkd_.bkp
found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP
/u01/app/flash_recovery_area/JENG/autobackup/2013_03_04/o1_mf_s_809175317_8m838pkd_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oradata/JENG/control01.ctl
output file name=/u01/app/flash_recovery_area/JENG/control02.ctl
Finished restore at 11-MAR-13


RMAN> mount database;

database mounted
released channel: ORA_DISK_1

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/11/2013 10:13:43
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u01/app/oradata/JENG/system01.dbf'

RMAN> quit