Google AI Studio API 키 발급
1.https://aistudio.google.com Google AI Studio 접속 및 로그인

2.API Key 메뉴 진입
왼쪽 사이드바에서 'Get API key'를 클릭하거나, 직접 https://aistudio.google.com/app/apikey 로 이동

3.Create API key 클릭
화면 우측 상단의 'Create API key' 버튼을 클릭.(결제 계정 연결 불필요, 무료 티어로 진행).

4.발급된 키 즉시 복사/저장
생성 즉시 전체 키 문자열을 브라우저를 닫기 전에 바로 복사해서 비밀번호 관리자나 안전한 파일에 저장

5.키 타입 확인 (Auth Key 여부)
2026년 9월부터 제한 없는 구버전 'Standard' 키는 Gemini API가 거부
혹시 예전에 만들어둔 키를 재사용하려는 경우 API Keys 페이지에서 Key Type이 Standard인지 확인이 필요

참고
무료 티어 한도: Gemini 2.5 Flash 기준 대략 분당 10회, 하루 500회 정도로 제한
무료 티어 데이터 정책: 무료 티어에서 보낸 프롬프트/응답은 Google이 모델 학습에 활용할 수 있음
RAG 및 Reranking - Google AI 자격증명 + 네트워크 준비
지금까지 임베딩(all-MiniLM)은 DB 안에서 외부 네트워크 필요 없음이 수행 했음.
요약(Summary)과 재정렬(Rerank)은 이번에 Gemini 같은 대형 LLM을 사용 하기 위해서 DB 밖 REST API를 호출 해야 함
주의할 점: Oracle 자격증명을 만드는 API가 두 개 있음.
-DBMS_CLOUD.CREATE_CREDENTIAL — Select AI에서 사용, username/password 방식
-DBMS_VECTOR.CREATE_CREDENTIAL — UTL_TO_SUMMARY/UTL_TO_RERANK에서 사용, JSON 방식
[oracle@rhel10nm ~]$ --##Google AI 자격증명 생성
[oracle@rhel10nm ~]$ id
uid=5001(oracle) gid=500(dba) groups=500(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[oracle@rhel10nm ~]$ env | grep SID
ORACLE_SID=CDB1
[oracle@rhel10nm ~]$ sqlplus "/as sysdba"
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "SYS"
SQL>
SQL> GRANT CREATE CREDENTIAL TO VECLAB;
Grant succeeded.
SQL> CONNECT veclab/VecLab_2026#@//localhost:1521/pdb1
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "VECLAB"
SQL>
SQL> DECLARE
2 jo JSON_OBJECT_T;
3 BEGIN
4 jo := JSON_OBJECT_T();
5 jo.put('access_token', 'YOUR_GOOGLE_AI_STUDIO_API_KEY_HERE'); --방금 발급받은 Google AI Studio API 키로 교체
6
7 DBMS_VECTOR.CREATE_CREDENTIAL(
8 credential_name => 'GOOGLE_AI_CRED',
9 params => JSON(jo.to_string)
10 );
11 END;
12 /
PL/SQL procedure successfully completed.
SQL> col CREDENTIAL_NAME for a20
SQL> col username for a20
SQL> col comments for a20
SQL> SELECT credential_name, username, comments FROM user_credentials WHERE credential_name = 'GOOGLE_AI_CRED';
CREDENTIAL_NAME USERNAME COMMENTS
-------------------- -------------------- --------------------
GOOGLE_AI_CRED NA
SQL> --USERNAME의 NA값은 access_token 방식이라 정상 임
SQL> exit
[oracle@rhel10nm ~]$
[oracle@rhel10nm ~]$
[oracle@rhel10nm ~]$ id
uid=5001(oracle) gid=500(dba) groups=500(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[oracle@rhel10nm ~]$ env | grep SID
ORACLE_SID=CDB1
[oracle@rhel10nm ~]$ --##네트워크 ACL 오픈
[oracle@rhel10nm ~]$ sqlplus "/as sysdba"
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> -- SYS로 접속, PDB1
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL>
SQL> BEGIN
2 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
3 host => 'generativelanguage.googleapis.com',
4 lower_port => 443,
5 upper_port => 443,
6 ace => xs$ace_type(
7 privilege_list => xs$name_list('http'),
8 principal_name => 'VECLAB',
9 principal_type => xs_acl.ptype_db)
10 );
11 END;
12 /
PL/SQL procedure successfully completed.
SQL> --결과 확인
SQL> set linesize 120
SQL> col PRIVILEGE for a30
SQL> COLUMN host FORMAT A40
SQL> COLUMN principal FORMAT A15
SQL> SELECT host, lower_port, upper_port, privilege, principal
2 FROM dba_host_aces
3 WHERE host = 'generativelanguage.googleapis.com';
HOST LOWER_PORT UPPER_PORT PRIVILEGE PRINCIPAL
---------------------------------------- ---------- ---------- ------------------------------ ---------------
generativelanguage.googleapis.com 443 443 HTTP VECLAB
SQL> --PRINCIPAL는 VECLAB, PRIVILEGE는 http 행이 보이면 정상
SQL>
SQL> --Gemini로 요약(UTL_TO_SUMMARY) 실행
SQL> CONNECT veclab/VecLab_2026#@//localhost:1521/pdb1
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "VECLAB"
SQL>
SQL> SET SERVEROUTPUT ON
SQL> SET LONG 5000
SQL>
SQL> DECLARE
2 input_text CLOB;
3 params CLOB;
4 summary CLOB;
5 BEGIN
6 SELECT doc_text INTO input_text FROM lab_raw_docs WHERE doc_id = 3; -- RMAN Guide
7
8 params := '{
9 "provider": "googleai",
10 "credential_name": "GOOGLE_AI_CRED",
11 "url": "https://generativelanguage.googleapis.com/v1beta/models/",
12 "model": "gemini-3.6-flash:generateContent",
13 "generation_config": {
14 "temperature": 0.2,
15 "maxOutputTokens": 1024
16 }
17 }';
18
19 summary := DBMS_VECTOR_CHAIN.UTL_TO_SUMMARY(input_text, JSON(params));
20 DBMS_OUTPUT.PUT_LINE('Summary: ' || summary);
21 EXCEPTION
22 WHEN OTHERS THEN
23 DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
24 END;
25 /
Summary: **Summary:**
Oracle's Recovery Manager (RMAN) is a built-in utility for backup and recovery that supports
full and incremental backups, using block change tracking to speed up incremental processes. It allows backups to be
validated for corruption, and Oracle advises periodically testing restore procedures to ensure successful recovery.
PL/SQL procedure successfully completed.'
SQL> --Line 12 : gemini-2.5-flash 모델이 신규 사용자에게는 더 이상 제공되지 않고, gemini-3.6-flash 사용 해야 함
SQL> --Line 15 : 만약 결과가 나오지 않거나 'Summary: **Summary:**' 한 줄만 나오면 'maxOutputTokens' 값을 높이면 됨글
SQL>
SQL> exit
[oracle@rhel10nm ~]$
Cohere 대시보드 가입
1.Cohere 대시보드 가입
https://dashboard.cohere.com 으로 이동해서 이메일 또는 Google/GitHub 계정으로 가입합니다. 신용카드 등록 없이 바로 가입됨

2.이메일 인증
가입 직후 이메일 인증을 마치면 대시보드로 자동 이동되며, 그 시점에 Trial API 키가 자동으로 이미 만들어져 있음 (별도 발급 버튼 누를 필요 없음).
3.API Keys 메뉴에서 키 복사
왼쪽 사이드바에서 'API Keys' 메뉴를 클릭하면 Trial 키가 목록에 보임. 복사 버튼으로 복사.

4.키 저장 (Rerank 엔드포인트 한도 참고)
이 키는 Rerank 엔드포인트 기준 분당 10회, 월 1,000회까지 무료. 복사한 키는 비밀번호 관리자나 안전한 파일에 바로 저장
UTL_TO_SUMMARY(요약)는 Google AI를 지원
UTL_TO_RERANK(재정렬)는 Google AI를 지원하지 않음
Oracle 26ai 공식 문서에서 Rerank 결과 재정렬 기능은 Cohere와 Vertex AI 두개만 지원
[oracle@rhel10nm ~]$ --##Cohere 자격증명 생성 + 네트워크 ACL
[oracle@rhel10nm ~]$ id
uid=5001(oracle) gid=500(dba) groups=500(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[oracle@rhel10nm ~]$ env | grep SID
ORACLE_SID=CDB1
[oracle@rhel10nm ~]$
[oracle@rhel10nm ~]$ sqlplus "/as sysdba"
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> -- VECLAB으로 접속
SQL> CONNECT veclab/VecLab_2026#@//localhost:1521/pdb1
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL>
SQL> show user
USER is "VECLAB"
SQL>
SQL> DECLARE
2 jo JSON_OBJECT_T;
3 BEGIN
4 jo := JSON_OBJECT_T();
5 jo.put('access_token', 'YOUR_COHERE_TRIAL_API_KEY_HERE'); -- 방금 복사한 Cohere 키로 교체
6
7 DBMS_VECTOR.CREATE_CREDENTIAL(
8 credential_name => 'COHERE_CRED',
9 params => JSON(jo.to_string)
10 );
11 END;
12 /
PL/SQL procedure successfully completed.
SQL> exit
[oracle@rhel10nm ~]$
[oracle@rhel10nm ~]$ sqlplus "/as sysdba"
SQL> show user
USER is "SYS"
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL>
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "SYS"
SQL>
SQL> BEGIN
2 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
3 host => 'api.cohere.com',
4 lower_port => 443,
5 upper_port => 443,
6 ace => xs$ace_type(
7 privilege_list => xs$name_list('http'),
8 principal_name => 'VECLAB',
9 principal_type => xs_acl.ptype_db)
10 );
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL> CONNECT veclab/VecLab_2026#@//localhost:1521/pdb1
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL>
SQL> show user
USER is "VECLAB"
SQL> col CREDENTIAL_NAME for a20
SQL> col USERNAME for a20
SQL> SELECT credential_name, username FROM user_credentials WHERE credential_name = 'COHERE_CRED';
CREDENTIAL_NAME USERNAME
-------------------- --------------------
COHERE_CRED NA
SQL>
SQL> SET SERVEROUTPUT ON
SQL> SET LONG 10000
SQL>
SQL> DECLARE
2 v_query CLOB := 'how to scale database reads across multiple server nodes';
3 v_docs JSON;
4 v_params CLOB;
5 v_reranked JSON;
6 BEGIN
7 SELECT JSON_OBJECT('documents' VALUE JSON_ARRAYAGG(chunk_text RETURNING JSON) RETURNING JSON)
8 INTO v_docs
9 FROM (
10 SELECT chunk_text
11 FROM lab_doc_chunks
12 ORDER BY VECTOR_DISTANCE(
13 chunk_embedding,
14 VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'how to scale database reads across multiple server nodes' AS DATA),
15 COSINE)
16 FETCH EXACT FIRST 5 ROWS ONLY
17 );
18
19 v_params := '{
20 "provider": "cohere",
21 "credential_name": "COHERE_CRED",
22 "url": "https://api.cohere.com/v1/rerank",
23 "model": "rerank-english-v3.0",
24 "return_documents": true,
25 "top_n": 3
26 }';
27
28 v_reranked := DBMS_VECTOR_CHAIN.UTL_TO_RERANK(v_query, v_docs, JSON(v_params));
29 DBMS_OUTPUT.PUT_LINE(JSON_SERIALIZE(v_reranked RETURNING CLOB PRETTY));
30 EXCEPTION
31 WHEN OTHERS THEN
32 DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
33 END;
34 /
[
{
"index" : 0,
"score" : 0.4065085,
"content" : "Oracle Real
Application Clusters allows multiple database instances to access a single
shared database concurrently. Each instance runs on a separate server node, and
the Cache Fusion technology"
},
{
"index" : 1,
"score" :
0.071073666,
"content" : "server node, and the Cache Fusion technology
synchronizes data blocks across instances using a high-speed interconnect. RAC
primarily addresses high availability at the instance level,"
},
{
"index" : 2,
"score" : 0.0060035954,
"content" : "database files. ASM
stripes and mirrors data across multiple disks automatically, removing the need
for a separate logical volume manager. ASM disk groups can be configured with"
}
]
PL/SQL procedure successfully completed.
SQL>
SQL> -- 1 0.4065 RAC — "multiple database instances access a single shared database... Cache Fusion"
SQL> -- 2 0.0711 RAC — "Cache Fusion technology synchronizes... high availability at the instance level"
SQL> -- 3 0.0060 ASM — "stripes and mirrors data across multiple disks"
SQL> exit
[oracle@rhel10nm ~]$

