Skip to content

Commit c9a3453

Browse files
authored
Modify setPassword.sh to work with multiple PDBs (#549)
Modify the setPassword.sh script for all single-instance database projects (except 11g XE) to correctly set the PDBADMIN password when one or more PDBs have been added. The updated script is identical for all 8 affected projects. Instead of parsing the directory names under $ORACLE_BASE/oradata/$ORACLE_SID to find the name of the PDB (which doesn't work when there are multiple PDBs), it queries v$pdbs and creates a PL/SQL script that sets the PDBADMIN password in all open PDBs. Tested with both VirtualBox and libvirt providers. Fixes #295 Signed-off-by: Paul Neumann <[email protected]>
1 parent 497fb08 commit c9a3453

File tree

8 files changed

+330
-107
lines changed

8 files changed

+330
-107
lines changed
Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,54 @@
11
#!/bin/bash
2-
# LICENSE UPL 1.0
32
#
4-
# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved.
5-
#
3+
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Licensed under the Universal Permissive License v 1.0 as shown at
5+
# https://oss.oracle.com/licenses/upl.
6+
#
67
# Since: November, 2016
78
8-
# Description: Sets the password for sys, system and pdb_admin
9+
# Description: Sets the password for sys, system and pdbadmin
910
#
1011
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
11-
#
12+
#
13+
14+
# Abort on any error
15+
set -Eeuo pipefail
1216

1317
ORACLE_PWD=$1
14-
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
15-
ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
16-
ORAENV_ASK=NO
17-
source oraenv
1818

1919
sqlplus / as sysdba << EOF
20-
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21-
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
22-
ALTER SESSION SET CONTAINER=$ORACLE_PDB;
23-
ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
24-
exit;
20+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
2522
EOF
2623

24+
echo 'Setting PDBADMIN password in open PDBs'
25+
26+
set_pdbadmin_pw=$(mktemp)
27+
trap 'rm -f "${set_pdbadmin_pw}"' EXIT
28+
29+
sqlplus -s / as sysdba > "${set_pdbadmin_pw}" << EOF
30+
SET HEADING OFF LINESIZE 120 PAGESIZE 0
31+
SELECT 'ALTER SESSION SET CONTAINER = ' || name || ';' || CHR(10)
32+
|| 'SET SERVEROUTPUT ON' || CHR(10)
33+
|| 'BEGIN' || CHR(10)
34+
|| ' EXECUTE IMMEDIATE ''ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD"'';' || CHR(10)
35+
|| ' DBMS_OUTPUT.PUT_LINE (''Set PDBADMIN password in ' || name || ' PDB'');' || CHR(10)
36+
|| 'EXCEPTION' || CHR(10)
37+
|| ' WHEN OTHERS THEN' || CHR(10)
38+
|| ' IF SQLCODE = -1918 THEN' || CHR(10)
39+
|| ' DBMS_OUTPUT.PUT_LINE (''PDBADMIN user not found in ' || name || ' PDB'');' || CHR(10)
40+
|| ' ELSE' || CHR(10)
41+
|| ' RAISE;' || CHR(10)
42+
|| ' END IF;' || CHR(10)
43+
|| 'END;' || CHR(10)
44+
|| '/'
45+
FROM v\$pdbs
46+
WHERE open_mode = 'READ WRITE'
47+
ORDER BY name;
48+
EOF
49+
50+
sed -i -e 's|no rows selected|PROMPT No open PDBs found|' "${set_pdbadmin_pw}"
51+
52+
echo 'EXIT' | sqlplus -s / as sysdba @"${set_pdbadmin_pw}"
53+
54+
echo 'Done setting PDBADMIN password in open PDBs'
Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,54 @@
11
#!/bin/bash
2-
# LICENSE UPL 1.0
32
#
4-
# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved.
5-
#
3+
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Licensed under the Universal Permissive License v 1.0 as shown at
5+
# https://oss.oracle.com/licenses/upl.
6+
#
67
# Since: November, 2016
78
8-
# Description: Sets the password for sys, system and pdb_admin
9+
# Description: Sets the password for sys, system and pdbadmin
910
#
1011
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
11-
#
12+
#
13+
14+
# Abort on any error
15+
set -Eeuo pipefail
1216

1317
ORACLE_PWD=$1
14-
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
15-
ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
16-
ORAENV_ASK=NO
17-
source oraenv
1818

1919
sqlplus / as sysdba << EOF
20-
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21-
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
22-
ALTER SESSION SET CONTAINER=$ORACLE_PDB;
23-
ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
24-
exit;
20+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
2522
EOF
2623

24+
echo 'Setting PDBADMIN password in open PDBs'
25+
26+
set_pdbadmin_pw=$(mktemp)
27+
trap 'rm -f "${set_pdbadmin_pw}"' EXIT
28+
29+
sqlplus -s / as sysdba > "${set_pdbadmin_pw}" << EOF
30+
SET HEADING OFF LINESIZE 120 PAGESIZE 0
31+
SELECT 'ALTER SESSION SET CONTAINER = ' || name || ';' || CHR(10)
32+
|| 'SET SERVEROUTPUT ON' || CHR(10)
33+
|| 'BEGIN' || CHR(10)
34+
|| ' EXECUTE IMMEDIATE ''ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD"'';' || CHR(10)
35+
|| ' DBMS_OUTPUT.PUT_LINE (''Set PDBADMIN password in ' || name || ' PDB'');' || CHR(10)
36+
|| 'EXCEPTION' || CHR(10)
37+
|| ' WHEN OTHERS THEN' || CHR(10)
38+
|| ' IF SQLCODE = -1918 THEN' || CHR(10)
39+
|| ' DBMS_OUTPUT.PUT_LINE (''PDBADMIN user not found in ' || name || ' PDB'');' || CHR(10)
40+
|| ' ELSE' || CHR(10)
41+
|| ' RAISE;' || CHR(10)
42+
|| ' END IF;' || CHR(10)
43+
|| 'END;' || CHR(10)
44+
|| '/'
45+
FROM v\$pdbs
46+
WHERE open_mode = 'READ WRITE'
47+
ORDER BY name;
48+
EOF
49+
50+
sed -i -e 's|no rows selected|PROMPT No open PDBs found|' "${set_pdbadmin_pw}"
51+
52+
echo 'EXIT' | sqlplus -s / as sysdba @"${set_pdbadmin_pw}"
53+
54+
echo 'Done setting PDBADMIN password in open PDBs'
Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,54 @@
11
#!/bin/bash
2-
# LICENSE UPL 1.0
32
#
4-
# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
5-
#
3+
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Licensed under the Universal Permissive License v 1.0 as shown at
5+
# https://oss.oracle.com/licenses/upl.
6+
#
67
# Since: November, 2016
78
8-
# Description: Sets the password for sys, system and pdb_admin
9+
# Description: Sets the password for sys, system and pdbadmin
910
#
1011
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
11-
#
12+
#
13+
14+
# Abort on any error
15+
set -Eeuo pipefail
1216

1317
ORACLE_PWD=$1
14-
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
15-
ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
16-
ORAENV_ASK=NO
17-
source oraenv
1818

1919
sqlplus / as sysdba << EOF
20-
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21-
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
22-
ALTER SESSION SET CONTAINER=$ORACLE_PDB;
23-
ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
24-
exit;
20+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
2522
EOF
2623

24+
echo 'Setting PDBADMIN password in open PDBs'
25+
26+
set_pdbadmin_pw=$(mktemp)
27+
trap 'rm -f "${set_pdbadmin_pw}"' EXIT
28+
29+
sqlplus -s / as sysdba > "${set_pdbadmin_pw}" << EOF
30+
SET HEADING OFF LINESIZE 120 PAGESIZE 0
31+
SELECT 'ALTER SESSION SET CONTAINER = ' || name || ';' || CHR(10)
32+
|| 'SET SERVEROUTPUT ON' || CHR(10)
33+
|| 'BEGIN' || CHR(10)
34+
|| ' EXECUTE IMMEDIATE ''ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD"'';' || CHR(10)
35+
|| ' DBMS_OUTPUT.PUT_LINE (''Set PDBADMIN password in ' || name || ' PDB'');' || CHR(10)
36+
|| 'EXCEPTION' || CHR(10)
37+
|| ' WHEN OTHERS THEN' || CHR(10)
38+
|| ' IF SQLCODE = -1918 THEN' || CHR(10)
39+
|| ' DBMS_OUTPUT.PUT_LINE (''PDBADMIN user not found in ' || name || ' PDB'');' || CHR(10)
40+
|| ' ELSE' || CHR(10)
41+
|| ' RAISE;' || CHR(10)
42+
|| ' END IF;' || CHR(10)
43+
|| 'END;' || CHR(10)
44+
|| '/'
45+
FROM v\$pdbs
46+
WHERE open_mode = 'READ WRITE'
47+
ORDER BY name;
48+
EOF
49+
50+
sed -i -e 's|no rows selected|PROMPT No open PDBs found|' "${set_pdbadmin_pw}"
51+
52+
echo 'EXIT' | sqlplus -s / as sysdba @"${set_pdbadmin_pw}"
53+
54+
echo 'Done setting PDBADMIN password in open PDBs'
Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,54 @@
11
#!/bin/bash
2-
# LICENSE UPL 1.0
32
#
4-
# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
5-
#
3+
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Licensed under the Universal Permissive License v 1.0 as shown at
5+
# https://oss.oracle.com/licenses/upl.
6+
#
67
# Since: November, 2016
78
8-
# Description: Sets the password for sys, system and pdb_admin
9+
# Description: Sets the password for sys, system and pdbadmin
910
#
1011
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
11-
#
12+
#
13+
14+
# Abort on any error
15+
set -Eeuo pipefail
1216

1317
ORACLE_PWD=$1
14-
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
15-
ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
16-
ORAENV_ASK=NO
17-
source oraenv
1818

1919
sqlplus / as sysdba << EOF
20-
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21-
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
22-
ALTER SESSION SET CONTAINER=$ORACLE_PDB;
23-
ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
24-
exit;
20+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
2522
EOF
2623

24+
echo 'Setting PDBADMIN password in open PDBs'
25+
26+
set_pdbadmin_pw=$(mktemp)
27+
trap 'rm -f "${set_pdbadmin_pw}"' EXIT
28+
29+
sqlplus -s / as sysdba > "${set_pdbadmin_pw}" << EOF
30+
SET HEADING OFF LINESIZE 120 PAGESIZE 0
31+
SELECT 'ALTER SESSION SET CONTAINER = ' || name || ';' || CHR(10)
32+
|| 'SET SERVEROUTPUT ON' || CHR(10)
33+
|| 'BEGIN' || CHR(10)
34+
|| ' EXECUTE IMMEDIATE ''ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD"'';' || CHR(10)
35+
|| ' DBMS_OUTPUT.PUT_LINE (''Set PDBADMIN password in ' || name || ' PDB'');' || CHR(10)
36+
|| 'EXCEPTION' || CHR(10)
37+
|| ' WHEN OTHERS THEN' || CHR(10)
38+
|| ' IF SQLCODE = -1918 THEN' || CHR(10)
39+
|| ' DBMS_OUTPUT.PUT_LINE (''PDBADMIN user not found in ' || name || ' PDB'');' || CHR(10)
40+
|| ' ELSE' || CHR(10)
41+
|| ' RAISE;' || CHR(10)
42+
|| ' END IF;' || CHR(10)
43+
|| 'END;' || CHR(10)
44+
|| '/'
45+
FROM v\$pdbs
46+
WHERE open_mode = 'READ WRITE'
47+
ORDER BY name;
48+
EOF
49+
50+
sed -i -e 's|no rows selected|PROMPT No open PDBs found|' "${set_pdbadmin_pw}"
51+
52+
echo 'EXIT' | sqlplus -s / as sysdba @"${set_pdbadmin_pw}"
53+
54+
echo 'Done setting PDBADMIN password in open PDBs'
Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,54 @@
11
#!/bin/bash
2-
# LICENSE UPL 1.0
32
#
4-
# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
5-
#
3+
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Licensed under the Universal Permissive License v 1.0 as shown at
5+
# https://oss.oracle.com/licenses/upl.
6+
#
67
# Since: November, 2016
78
8-
# Description: Sets the password for sys, system and pdb_admin
9+
# Description: Sets the password for sys, system and pdbadmin
910
#
1011
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
11-
#
12+
#
13+
14+
# Abort on any error
15+
set -Eeuo pipefail
1216

1317
ORACLE_PWD=$1
14-
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
15-
ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
16-
ORAENV_ASK=NO
17-
source oraenv
1818

1919
sqlplus / as sysdba << EOF
20-
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21-
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
22-
ALTER SESSION SET CONTAINER=$ORACLE_PDB;
23-
ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
24-
exit;
20+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
21+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
2522
EOF
2623

24+
echo 'Setting PDBADMIN password in open PDBs'
25+
26+
set_pdbadmin_pw=$(mktemp)
27+
trap 'rm -f "${set_pdbadmin_pw}"' EXIT
28+
29+
sqlplus -s / as sysdba > "${set_pdbadmin_pw}" << EOF
30+
SET HEADING OFF LINESIZE 120 PAGESIZE 0
31+
SELECT 'ALTER SESSION SET CONTAINER = ' || name || ';' || CHR(10)
32+
|| 'SET SERVEROUTPUT ON' || CHR(10)
33+
|| 'BEGIN' || CHR(10)
34+
|| ' EXECUTE IMMEDIATE ''ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD"'';' || CHR(10)
35+
|| ' DBMS_OUTPUT.PUT_LINE (''Set PDBADMIN password in ' || name || ' PDB'');' || CHR(10)
36+
|| 'EXCEPTION' || CHR(10)
37+
|| ' WHEN OTHERS THEN' || CHR(10)
38+
|| ' IF SQLCODE = -1918 THEN' || CHR(10)
39+
|| ' DBMS_OUTPUT.PUT_LINE (''PDBADMIN user not found in ' || name || ' PDB'');' || CHR(10)
40+
|| ' ELSE' || CHR(10)
41+
|| ' RAISE;' || CHR(10)
42+
|| ' END IF;' || CHR(10)
43+
|| 'END;' || CHR(10)
44+
|| '/'
45+
FROM v\$pdbs
46+
WHERE open_mode = 'READ WRITE'
47+
ORDER BY name;
48+
EOF
49+
50+
sed -i -e 's|no rows selected|PROMPT No open PDBs found|' "${set_pdbadmin_pw}"
51+
52+
echo 'EXIT' | sqlplus -s / as sysdba @"${set_pdbadmin_pw}"
53+
54+
echo 'Done setting PDBADMIN password in open PDBs'

0 commit comments

Comments
 (0)