Created
December 6, 2021 19:09
-
-
Save krisrice/cd2ee4bf93d91e70a51d3bcd34cfe9f8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const common = require("oci-common"); | |
const databasetools = require("oci-databasetools"); | |
const secrets = require("oci-secrets"); | |
const core = require("oci-core"); | |
const fs = require("fs"); | |
const oracledb = require('oracledb'); | |
// | |
// Configure Instant Client | |
// | |
oracledb.initOracleClient({libDir: "/Users/klrice/workspace/node/instantClient/instantclient_19_8", | |
configDir: __dirname}); | |
// | |
// Configure OCI Connectivity | |
// | |
const configurationFilePath = "~/.oci/config"; | |
const profile = "SICDBAAS"; | |
const provider = new common.ConfigFileAuthenticationDetailsProvider( | |
configurationFilePath, | |
profile | |
); | |
// | |
// set Compartment / Connection OCIDs | |
// | |
const compartmentId = "ocid1.compartment.oc1..xxxx"; | |
const dbId= "ocid1.databasetoolsconnection.oc1.phx.xxx" | |
// | |
// Simple Timer output | |
// | |
var last = Date.now(); | |
var messNum = 0; | |
function elap(message, data) { | |
messNum++; | |
var ret = (""+messNum).padEnd(3," ") + " " + message.padEnd(30,".") + ((Date.now()-last) + "").padStart(4," ") + "ms".padEnd(8," ") + ( data ? " Results: " + JSON.stringify(data) : ""); | |
last = Date.now(); | |
console.log(ret); | |
} | |
elap('Starting'); | |
(async () => { | |
try { | |
// Create a service client | |
const client = new databasetools.DatabaseToolsClient({ | |
authenticationDetailsProvider: provider | |
}); | |
elap('Created Client'); | |
// Create a request and dependent object(s). | |
const request= databasetools.requests.GetDatabaseToolsConnectionRequest = {databaseToolsConnectionId:dbId}; | |
elap('Created Request'); | |
// Send request to the Client. | |
const response = await client.getDatabaseToolsConnection(request); | |
keyType = response.databaseToolsConnection.keyStores[0].keyStoreType; | |
keyStoreID = response.databaseToolsConnection.keyStores[0].keyStoreContent.secretId; | |
connString = response.databaseToolsConnection.connectionString; | |
username = response.databaseToolsConnection.userName; | |
userPasswordID = response.databaseToolsConnection.userPassword.secretId; | |
elap('Received Details'); | |
// Create a service client | |
const secretClient = new secrets.SecretsClient({authenticationDetailsProvider: provider}); | |
const secretRequestPassword= secrets.requests.GetSecretRequest = {secretId:userPasswordID}; | |
const secretResponsePassword = await secretClient.getSecretBundle(secretRequestPassword); | |
passwd = Buffer.from(secretResponsePassword.secretBundle.secretBundleContent.content, 'base64').toString('ascii'); | |
elap('Got Password'); | |
const secretRequestWallet= secrets.requests.GetSecretRequest = {secretId:keyStoreID}; | |
const secretResponseWallet = await secretClient.getSecretBundle(secretRequestWallet); | |
buff = Buffer.from(secretResponseWallet.secretBundle.secretBundleContent.content, 'base64'); | |
fs.writeFileSync("cwallet.sso", buff); | |
fs.writeFileSync("sqlnet.ora",`WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="`+__dirname +`"))) | |
SSL_SERVER_DN_MATCH=yes`) | |
elap('Wrote cwallet/sqlnet'); | |
dbConfig = { | |
user: username, | |
connectString: connString, | |
password : passwd | |
}; | |
elap('Connecting...'); | |
//console.log(dbConfig); | |
connection = await oracledb.getConnection(dbConfig); | |
elap('Connected'); | |
for(var i=0; i<10; i++) { | |
var sql = "select "+i+" from dual"; | |
const result = await connection.execute( sql); | |
elap( ".."+sql,result.rows[0][0]); | |
} | |
} catch (error) { | |
console.log("getDatabaseToolsConnection Failed with error " + error); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment