Сочетание адмирал флота пишется строчными: адмирал флота Кузнецов.
Название Осло согласуется в мужском роде.
Верно: Ему присвоили звание полковника. Он окончил войну в звании майора.
Приведенное Вами написание корректно.
Корректно: звание города-героя; звание "город-герой".