ホームページ  >  記事  >  データベース  >  Oracle のセットとリセットの使用方法のチュートリアルのケース

Oracle のセットとリセットの使用方法のチュートリアルのケース

小云云
小云云オリジナル
2017-12-11 15:03:371477ブラウズ

この記事では、Oracle パラメータ設定チュートリアルの実際の設定とリセットに関する関連情報を中心に、サンプル コードを通じて詳細に紹介していますので、必要な方は参考にしていただければ幸いです。みんな。

はじめに

この記事では、主に Oracle パラメータの設定とリセットに関する関連内容を紹介し、参考と学習のために共有します。以下では多くを説明しません。

環境: Oracle 10.2.0.5 RAC

要件: ノード 1 の aq_tm_processes をデフォルトに復元する必要があり、ノード 2 の設定を変更しない必要があります

背景の紹介:

10.2 公式ファイルの aq_tm_processes パラメーター。これを参照してください。パラメーターのデフォルト値は 0 です。デフォルト 0 と呼びましょう。

そして、実際、このデフォルト 0 の効果は、それとはまったく異なることがわかりました。 SET を手動で 0 に設定します。

この問題について同僚と議論し、最終的に技術的な詳細を学びました:

Oracle では、Oracle のデフォルト値を復元したい場合、SET を使用してパラメータ値を設定するのが実際にははるかに少ない作業で済みます。この値をリセットすると、すべてが Oracle のデフォルト設計に従います。

現在のシナリオを具体的に見ると、パラメーター aq_tm_processes を 0 に設定すると、元のデフォルトの 0 とはまったく異なります。

0 に設定すると、すべての q00 ワーカー プロセスがシャットダウンされ、再起動されません。デフォルトで 0 の場合、q00 ワーカー プロセスを開始できます。

1. テスト環境を構築します

現在作成されているパラメータの内容は次のようになります:

*.aq_tm_processes=1
jy1.aq_tm_processes=0

インスタンスの設定優先度がわかります。は high です。つまり、この設定の影響は、インスタンス 1 のパラメーターが 0 で、インスタンス 2 のパラメーターが 1 であることです。

つまり、インスタンス 1 は q00 ワーカー プロセスを開始できず、インスタンス 2 はインスタンス 2 です。 q00ワーカープロセスを開始できます。

本番環境をシミュレートするテスト環境を構築します:

最初に aq_tm_processes を 1 に設定します:

alter system set aq_tm_processes = 1 scope=both sid='*';
--create pfile='/tmp/pfile11.ora' from spfile;

この時点で、パラメーター ファイルに次のような設定があります:

*.aq_tm_processes=1

次に aq_tm_processes を設定しますインスタンス 1 から 0 まで

alter system set aq_tm_processes = 0 scope=both sid='jy1';
--create pfile='/tmp/pfile12.ora' from spfile;

このとき、パラメータ ファイルには次のような設定が存在します:

*.aq_tm_processes=1
jy1.aq_tm_processes=0

これは、本番環境の現在の状況をシミュレートします。実際の動作プロセスを見てみましょう:

SQL> 
SQL> alter system set aq_tm_processes = 1 scope=both sid='*';

System altered.

SQL> create pfile='/tmp/pfile11.ora' from spfile;

File created.

SQL> show parameter aq

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes      integer  1
SQL> !ps -ef|grep q00
oracle 1462 27385 0 15:27 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00
oracle 1464 1462 0 15:27 pts/1 00:00:00 grep q00
oracle 26534  1 0 15:08 ?  00:00:00 ora_q002_jy1
oracle 31538  1 0 15:21 ?  00:00:00 ora_q000_jy1

SQL> 
SQL> alter system set aq_tm_processes = 0 scope=both sid='jy1';

System altered.

SQL> create pfile='/tmp/pfile12.ora' from spfile;

File created.

SQL> show parameter aq

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes      integer  0
SQL> !ps -ef|grep q00
oracle 2044 27385 0 15:28 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00
oracle 2046 2044 0 15:28 pts/1 00:00:00 grep q00

SQL>

0に設定すると、q00プロセスが消え、インスタンスを再起動してもq00プロセスが起動しなくなることがわかります。

2. テスト計画

ここでしなければならないことは、ノード 2 の設定を変更せずに、ノード 1 の aq_tm_processes をデフォルトに戻すことです。

2.1 パラメータを直接リセットしてノード 1 を指定し、検証を再開してみてはいかがでしょうか?

alter system reset aq_tm_processes scope=spfile sid='jy1';
create pfile='/tmp/pfile13.ora' from spfile;

ノード 1 の検証を再開しますか?要件が達成できるかどうかを確認しますか?

具体的な実際の操作は次のとおりです:

SQL> alter system reset aq_tm_processes scope=spfile sid='jy1';

System altered.

SQL> create pfile='/tmp/pfile13.ora' from spfile;

File created.

SQL> show parameter aq

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes      integer  0
SQL> !ps -ef|grep q00
oracle 3801 27385 0 15:32 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00
oracle 3803 3801 0 15:32 pts/1 00:00:00 grep q00

SQL> startup force
ORACLE instance started.

Total System Global Area 599785472 bytes
Fixed Size     2098112 bytes
Variable Size    301993024 bytes
Database Buffers   289406976 bytes
Redo Buffers    6287360 bytes
Database mounted.
Database opened.
SQL> show parameter aq

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes      integer  1
SQL> !ps -ef|grep q00
oracle 4228  1 0 15:33 ?  00:00:00 ora_q000_jy1
oracle 4232  1 0 15:33 ?  00:00:00 ora_q002_jy1
oracle 5021 27385 0 15:35 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00
oracle 5023 5021 0 15:35 pts/1 00:00:00 grep q00

SQL>

ご覧のとおり、答えは明らかに「いいえ」です。

これはインスタンス 1 のパラメータのみをリセットするためですが、以前にグローバル パラメータ * があったため、インスタンス 1 を再起動すると aq_tm_processes パラメータが 1 になることがわかります。
つまり、インスタンス 1 の設定を削除すると、全体の設定は自然に従うことになります。

2.2 実験の正しい方法

上記の基盤を使用して、要件を実装するというアイデアがあります:

それについて考えてみましょう。グローバルパラメータもリセットされると、以前のパラメータに影響しますノード 2 の設定を行うと、次のようになります。ノード 2 の値を個別に設定してから、グローバル パラメータをリセットすることのみが可能です。

alter system set aq_tm_processes = 1 scope=both sid='jy2';
--create pfile='/tmp/pfile14.ora' from spfile;

alter system reset aq_tm_processes scope=spfile sid='*';
--create pfile='/tmp/pfile15.ora' from spfile;

重启节点1验证??确认是否可以实现需求?

具体实际操作如下:

SQL> alter system set aq_tm_processes = 1 scope=both sid='jy2';

System altered.

SQL> create pfile='/tmp/pfile14.ora' from spfile;

File created.

SQL> alter system reset aq_tm_processes scope=spfile sid='*';

System altered.

SQL> create pfile='/tmp/pfile15.ora' from spfile;

File created.

SQL> startup force
ORACLE instance started.

Total System Global Area 599785472 bytes
Fixed Size     2098112 bytes
Variable Size    301993024 bytes
Database Buffers   289406976 bytes
Redo Buffers    6287360 bytes
Database mounted.
Database opened.
SQL> show parameter aq

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes      integer  0
SQL> !ps -ef|grep q00
oracle 7446  1 1 15:40 ?  00:00:00 ora_q000_jy1
oracle 7448  1 0 15:40 ?  00:00:00 ora_q001_jy1
oracle 7450  1 0 15:40 ?  00:00:00 ora_q002_jy1
oracle 7452  1 0 15:40 ?  00:00:00 ora_q003_jy1
oracle 7480 27385 0 15:41 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00
oracle 7482 7480 0 15:41 pts/1 00:00:00 grep q00

SQL>

実際の動作テストで検証された答えは、期待値と一致していることがわかります。「はい」です。

注: pfile を作成する手順はすべて削除できます。その際、各ステップの後にこの操作を追加したのは、理論が正しいかどうかを確認したかったからです。

3. 概要

つまり、実際の顧客環境では、要件を満たすために次の 3 つの手順を実行する必要があります:

--保障节点2的设置不变
alter system set aq_tm_processes=1 scope=spfile sid='jy2';
--reset节点1的设置
alter system reset aq_tm_processes scope=spfile sid='jy1';
--reset全局的设置
alter system reset aq_tm_processes scope=spfile sid='*';

関連する推奨事項:

変換機能と置換の詳細な説明Oracle 関数内

Oracle での Contains 関数の使用法の概要

Oracle でのテーブル関数のアプリケーションの簡単な分析

以上がOracle のセットとリセットの使用方法のチュートリアルのケースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。