コンポーネント図

自動メモリ管理が推奨されていますが、HugePagesを利用する場合自動メモリ管理は使えないので注意が必要です。
自動メモリー管理(AMM)とHugePagesは、互換性がありません。AMMを使用すると、SGAメモリー全体は
https://docs.oracle.com/cd/E57425_01/121/UNXAR/appi_vlm.htm/dev/shmの下にファイルを作成することによって割り当てられます。Oracle DatabaseがAMMを使用してSGAを割り当てると、HugePagesは予約されません。Oracle Database 12cでHugePagesを使用するには、AMMを無効にする必要があります
メモリ管理に関する初期化パラメータ
| 自動メモリ管理 | 自動共有メモリ管理 | 手動共有メモリ管理 | 自動PGAメモリ管理 | |
| memory_target (動的) |
SGAとPGAの合計としたい値 | 0 もしくは未設定 | 0 もしくは未設定 | |
| memory_max_target (静的) |
memory_targetの最大値 memory_targetを誤って大きな値を設定したことを考慮した安全装置 |
|||
| sga_target | 当項目設定値が最低値 | 当項目設定値(固定)範囲内で、各コンポーネントの値が自動調整 | 0 もしくは未設定 | |
| sga_max_size | (未設定の場合memory_max_targetの値が適用される)インスタンス起動時に当項目値でメモリを獲得する。 | 設定されている場合、この値がSGA上限値 | ||
| pga_aggregate_target | 当項目設定値を超えない範囲内でPGA合計を自動調整(目標値) | |||
| pga_aggregate_limit | 当項目設定値を超えるようになるとプロセスやセッションを強制的に中断や終了がはじまる |
メモリ管理に関わる初期化パラメータの確認SQL
select w.LNO,w.NAME,to_number(w.VALUE) value
from
(
select
p.NAME,p.VALUE,decode(p.NAME
,'memory_target',1
,'memory_max_target',2
,'sga_target',3
,'sga_max_size',4
,'pga_aggregate_target',5
,'pga_aggregate_limit',6
,'log_buffer',7
,'db_cache_size',8
,'shared_pool_size',9
,'java_pool_size',10
,'large_pool_size',11
) lno
from v$parameter p
where p.NAME in (
'memory_target'
,'memory_max_target'
,'sga_target'
,'sga_max_size'
,'pga_aggregate_target'
,'pga_aggregate_limit'
,'log_buffer'
,'db_cache_size'
,'shared_pool_size'
,'java_pool_size'
,'large_pool_size'
)
) w
order by w.LNO
;
初期化パラメータ出力例
SQL> SET LIN 100
SQL> SET PAGES 20
SQL> COLUMN LNO FORMAT 999
SQL> COLUMN NAME FORMAT A24
SQL> COLUMN VALUE FORMAT 999,999,999,999
SQL> /
LNO NAME VALUE
---- ------------------------ ----------------
1 memory_target 0
2 memory_max_target 0
3 sga_target 1,191,182,336
4 sga_max_size 1,191,182,336
5 pga_aggregate_target 396,361,728
6 pga_aggregate_limit 2,147,483,648
7 log_buffer 13,328,384
8 db_cache_size 0
9 shared_pool_size 0
10 java_pool_size 0
11 large_pool_size 0
12 db_block_buffers 0
12行が選択されました。
SQL>
SQL*Plus出力用
SET LIN 100 SET PAGES 20 COLUMN LNO FORMAT 999 COLUMN NAME FORMAT A24 COLUMN VALUE FORMAT 999,999,999,999


コメント
import yaml
import subprocess
import sys
from pathlib import Path
import platform
import json
from urllib.parse import urlencode
import re
def load_curl_config(file_path):
with open(file_path, ‘r’, encoding=’utf-8′) as f:
return yaml.safe_load(f)
def build_curl_command(config, show_headers):
method = config.get(‘method’, ‘GET’)
base_url = config[‘url’]
params = config.get(‘params’, {})
if params and method.upper() == ‘GET’:
query_string = urlencode(params)
full_url = f”{base_url}?{query_string}”
else:
full_url = base_url
cmd = [‘curl’, ‘-s’]
if show_headers:
cmd += [‘-D’, ‘-‘]
cmd += [‘-X’, method, full_url]
headers = config.get(‘headers’, {})
for key, value in headers.items():
cmd += [‘-H’, f'{key}: {value}’]
if method.upper() in [‘POST’, ‘PUT’]:
if ‘data’ in config:
cmd += [‘-d’, config[‘data’]]
elif params:
for k, v in params.items():
cmd += [‘–data-urlencode’, f'{k}={v}’]
cmd += [‘-w’, ‘\nHTTP Status: %{http_code}\n’]
return cmd
def quote_arg_bash(arg):
# 特殊文字が利用されている場合シングルクォートで囲む
if any(c in arg for c in [‘ ‘, ‘?’, ‘{‘, ‘}’, ‘:’, ‘”‘, ‘&’]):
return f”‘{arg}'”
return arg
def quote_arg_ps(arg):
# 今のところbash版と同じで問題なさそう
return quote_arg_bash(arg)
def parse_curl_output(output, show_headers):
http_code = output.strip()[-3:]
full_response = output.strip()[:-16] # ‘HTTP Status: ‘ + ‘ 999’ = 16
if show_headers:
header, unused, body = full_response.partition(‘\r\n\r\n’)
if not body:
header, unused, body = full_response.partition(‘\n\n’)
return header.strip(), body.strip(), http_code
else:
return ”, full_response.strip(), http_code
def handle_error(message):
ERROR_CODE = “ERROR”
print(message)
return ERROR_CODE
def needs_bearer_token(config):
# Bearer トークンを抽出
authorization_value = config[“headers”].get(“Authorization”)
if authorization_value is None:
return None # トークン取得不要
#print(f”authorization_value===> {authorization_value}”)
match = re.search(r”\[([^\]]+)\]”, authorization_value)
if match:
# トークンの取得が必要
auth_yaml = match.group(1) # 抽出した値
print(f”{auth_yaml} によるトークン取得を実施します”) # 出力: token_issue_sooni.yml
config_path = Path(“templates”) / auth_yaml
if not config_path.exists():
return handle_error(f”{auth_yaml}ファイルが見つかりません。”)
tconfig = load_curl_config(config_path)
api_name = tconfig.get(‘api_name’, ‘(名称未設定)’)
cmd = build_curl_command(tconfig, False)
print(f”Token取得 curl ===> {cmd}”)
result = subprocess.run(cmd, capture_output=True, text=True,encoding=”utf-8″,errors=”replace”)
header, body, http_code = parse_curl_output(result.stdout, False)
print(f”httpステータスコード: {http_code}\n”)
try:
if int(http_code) != 200:
return handle_error(f”http_code:{http_code} トークン取得に失敗”)
except ValueError:
return handle_error(f”無効な HTTP ステータスコード: {http_code}”)
if not body:
return handle_error(“レスポンスボディが空です”)
try:
# JSON を辞書型に変換
parsed = json.loads(body)
#print(json.dumps(parsed, indent=2, ensure_ascii=False))
# accesstoken の値を取得
access_token = parsed.get(“accesstoken”)
if not access_token: # 取得できなかった場合の処理を追加
return handle_error(“アクセストークンの取得に失敗しました。”)
#print(access_token)
# [] 内の文字列を “newtoken” に置き換える
config[“headers”][“Authorization”] = re.sub(r”\[.*?\]”,access_token, config[“headers”][“Authorization”])
return access_token
except json.JSONDecodeError:
print(body)
return handle_error(“JSON変換でエラー発生”)
else:
# トークン取得不要
return None
def main():
if len(sys.argv) {cmd}”)
result = subprocess.run(cmd, capture_output=True, text=True,encoding=”utf-8″,errors=”replace”)
# 実行結果の整形
header, body, http_code = parse_curl_output(result.stdout, show_headers)
cmd[-1] = cmd[-1].replace(‘\n’, ‘\\n’) # 最後の要素の ‘\n’ をエスケープ
bash_cmd = ‘ ‘.join(quote_arg_bash(arg) for arg in cmd)
ps_cmd = ‘ ‘.join(quote_arg_ps(arg) for arg in cmd)
print(“=== 実行コマンド ===”)
print(f”対象API名: {api_name}”)
print(“[bash/macOS 用]”)
print(bash_cmd)
print(“[PowerShell 用]”)
print(ps_cmd)
print(“\n=== 実行結果 ===”)
print(f”httpステータスコード: {http_code}\n”)
if show_headers:
print(“レスポンスヘッダ:”)
print(header)
print(“\nレスポンスボディ:”)
try:
parsed = json.loads(body)
print(json.dumps(parsed, indent=2, ensure_ascii=False))
except json.JSONDecodeError:
print(body)
if __name__ == ‘__main__’:
main()